// lib_js by rod.rant-on.net | rodmorelos@msn.com
// keep these two lines and you're free to use this code

// functions i find useful or are used in my scripts

// measure page width and height (the viewable canvas area)
function getViewport()
{
	if (document.documentElement && document.documentElement.scrollLeft) this.scrollX = document.documentElement.scrollLeft;
	else if (document.body && document.body.scrollLeft) this.scrollX = document.body.scrollLeft;
	else if (window.scrollX) this.scrollX = window.scrollX;
	else if (window.pageXOffset) this.scrollX = window.pageXOffset;
	else this.scrollX = 0;
	if (document.documentElement && document.documentElement.scrollTop) this.scrollY = document.documentElement.scrollTop;
	else if (document.body && document.body.scrollTop) this.scrollY = document.body.scrollTop;
	else if (window.scrollY) this.scrollY = window.scrollY;
	else if (window.pageYOffset) this.scrollY = window.pageYOffset;
	else this.scrollY = 0;
	if (document.documentElement && document.documentElement.clientWidth) this.width = document.documentElement.clientWidth;
	else if (document.body && document.body.clientWidth) this.width = document.body.clientWidth;
	else if (window.innerWidth) this.width = window.innerWidth;
	else this.width = 0;
	if (document.documentElement && document.documentElement.clientHeight) this.height = document.documentElement.clientHeight;
	else if (document.body && document.body.clientHeight) this.height = document.body.clientHeight;
	else if (window.innerHeight) this.height = window.innerHeight;
	else this.height = 0;
}

// event listeners
// object       = the object to attach the event handler to
// eventType    = the type of event to listen for
// functionName = the handler function to execute when the event is fired
// capture      = use event capture?
function addEvent(object, eventType, functionName, capture)
{
	if (object.addEventListener)
	{
		object.addEventListener(eventType, functionName, capture);
		return true;
	}
	else if (object.attachEvent)
	{
		var ae = object.attachEvent('on' + eventType, functionName);
		return ae;
	}
	else { object['on' + eventType] = functionName; }
}

function removeEvent(object, eventType, functionName, capture)
{
	if (object.removeEventListener)
	{
		object.removeEventListener(eventType, functionName, capture);
		return true;
	}
	else if (object.detachEvent)
	{
		var re = object.detachEvent('on' + eventType, functionName);
		return re;
	}
	else { object['on' + eventType] = null; }
}

function fixEvent(e, currentTarget)
{
	if (!e) e = event;
	if (!e.target) e.target = e.srcElement;
	if (!e.currentTarget) e.currentTarget = currentTarget;
	if (typeof e.layerX == 'undefined') e.layerX = e.offsetX;
	if (typeof e.layerY == 'undefined') e.layerY = e.offsetY;
	if (typeof e.clientX == 'undefined') e.clientX = e.pageX;
	if (typeof e.clientY == 'undefined') e.clientY = e.pageY;
	if (!e.stopPropagation) e.stopPropagation = function() { this.cancelBubble = true; }
	if (!e.preventDefault) e.preventDefault = function() { this.returnValue = false; }
	return e;
}

// browser check
function browserCheck()
{
	this.ua = navigator.userAgent.toLowerCase();
	this.dom = document.getElementById ? 1 : 0;
	this.op7 = (this.dom && this.ua.indexOf('opera 7') > -1 || this.ua.indexOf('opera/7') > -1) ? 1 : 0;
	this.ie5 = (this.dom && this.ua.indexOf('msie 5') > -1) ? 1 : 0;
	this.ie6 = (this.dom && this.ua.indexOf('msie 6') > -1) ? 1 : 0;
	this.moz = (this.dom && this.ua.indexOf('mozilla') > -1 && this.ua.indexOf('gecko') > -1) ? 1 : 0;
	return this;
}

// returns a random number between x and y (integers)
function rand(x, y) { return (Math.round(Math.random() * (y - x)) + x); }

// browser check variable
var bw = browserCheck();