// © rod morelos | rodmorelos@msn.com
// keep these two lines and you're free to use this code

// measure page width and height
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();