function _browserCheck(){
	this.w3c = (!!document.getElementById);
	this.ns = (!!document.layers);
	this.ie = (!!document.all);
	this.v = parseInt(navigator.appVersion);
	this.mac = (navigator.userAgent.toLowerCase().indexOf(" mac_") != -1);
}
is = new _browserCheck();

// generic object locator functions
function getObject(sName, container){
	var obj = null;
	if( typeof(sName) != "string" ){
		obj = sName;
	} else if( is.v >= 4 ){
		if( !container ) container = document;
		if( is.w3c ){
			if( document.getElementById(sName) ) obj = document.getElementById(sName);
		} else if( is.ie ){
			if( document.all[sName] ) obj = document.all[sName];
		} else if( is.ns ){
			if( container.anchors[sName] ) obj = container.anchors[sName];
	    else if( container.forms[sName] ) obj = container.forms[sName];
	    else if( container.images[sName] ) obj = container.images[sName];
	    else if( container.layers[sName] ) obj = container.layers[sName];
		}
	}

	return obj;
}
		 
function findObjectContainer(sName, container){
	var oContainer = null;
	if( is.ie || is.w3c ){
		oContainer = getObject(sName, document) ? document : null;
	} else if( is.ns ){
		if( !container ) container = window.document;
		if( getObject(sName,container) ){
			oContainer = container;
		} else {
			var layers = getLayers( new RegExp(".*"), container );
			for( var i = 0; i < layers.length; i++ ){
				oContainer = findObjectContainer(sName, layers[i].document);
				if( oContainer ) break;
			}
		}
	}

	return oContainer;
}

function findObject(sName) {
	var obj = null;
	if( is.v >= 4 ){
		var container = findObjectContainer(sName);
		if( container ) obj = getObject(sName, container);
	}

	return obj;
}

function getLayers( oRegEx, container ) {
	var layers = new Array();
	layers.length = 0;
	if( is.v >= 4 ){
		if( !container ) container = document;
		if( is.ns ){
			for( var i = 0; i < container.layers.length; i++ ){
				var obj = container.layers[i];
				if( !oRegEx || oRegEx.exec(obj.id) ) layers[layers.length] = obj;
			}
		} else if( this.ie ){
			var divColl = container.all.tags("DIV");
			for( i=0; i < divColl.length; i++ ){
				if( !oRegEx || oRegEx.exec(divColl[i].id) ) layers[layers.length] = divColl[i];
			}
		}
	}
	return( layers );
}

// generic image functions
function getImage(sName){
	return findObject(sName);
}

function getImageContainer(sName){
	return findObjectContainer(sName);
}

function getParentObject(obj) {
	var parent = null;
	if( (is.ie || is.w3c) && !!obj ){
		if( obj.offsetParent ) parent = obj.offsetParent;
	} else if( is.ns ){
		// if we're looking at a layer object (or a window), get
		// the parentWindow value, otherwise search for the container
		if( obj.parentLayer ){
			parent = obj.parentLayer || null;
		} else {
			parent = findObjectContainer(obj);
			if( parent ) parent = parent.parentWindow;
		}
	}

	return parent;
}

function findOffsetValue(obj, value){
	var offset = 0;
	if( is.v >= 4 ){
		// Requested value is specified as an MSIE offset value.
		// Perform any translations necessary for other browsers.
		if( is.ns ){
			if( value == "offsetLeft" ) value = "pageX";
	    else if( value == "offsetTop" ) value = "pageY";
		}
		var parent = getParentObject(obj);
		while( parent ){
			offset += (parent[value] || 0);
			parent = getParentObject(parent);
		}
	}

	return ( offset || 0 );
}

function getImageLeft(oImg){
	if( typeof oImg == "string" ) oImg = getImage(oImg);
	if( !oImg ) return 0;
	
	var left   = 0;
	var offset = parseInt(findOffsetValue(oImg, "offsetLeft"));
	if( is.ns ) left = oImg.x;
  else if ( is.ie || is.w3c ) left = parseInt(oImg.offsetLeft);

	return  left + offset;
}

function getImageTop(oImg){
	if( typeof(oImg) == "string" ) oImg = getImage(oImg);
	if( !oImg ) return 0;
	var top   = 0;
	var offset = parseInt(findOffsetValue(oImg, "offsetTop"));
	if( is.ns ) top = oImg.y;
  else if ( is.ie || is.w3c ) top = parseInt(oImg.offsetTop);
	if( is.ie && is.mac ) offset = parseInt(document.body.topMargin);
	return top + offset;
}

function getImageHeight(oImg){
	if ( typeof(oImg) == "string" ) oImg = getImage(oImg);
	if( !oImg ) return 0;
	return oImg.height;
}

function getImageWidth(oImg){
	if ( typeof(oImg) == "string" ) oImg = getImage(oImg);
	if( !oImg ) return 0;
	return oImg.width;
}
