/* Page functions! */

SN.Page = new Object();

// Global page functions!
SN.Page.search = function(container, attribute, query, tag) {
    var searchList = container.getElementsByTagName(tag);
    var searchLen = searchList.length;
    var results = new Array();
    if (SN.Browser.isIE && attribute == 'class') {
        attribute = 'className';
    }
    for (var i = 0; i < searchLen; i++) {
        if (searchList[i].getAttribute(attribute) == query) {
            results.push(searchList[i]);
        }
    }
    return results;
};

SN.Page.size = function() {
	var width = 0;
	var height = 0;
	
	// IE
	if (!window.innerWidth) {
		if (document.documentElement.clientWidth) {
			// strict
			width = document.documentElement.clientWidth;
			height = document.documentElement.clientHeight;
		} else {
			// quirks
			width = document.body.clientWidth;
			height = document.body.clientHeight;
		}
	} else {
		// W3C standard
		width = window.innerWidth;
		height = window.innerHeight;
	}
	return {'width':width, 'height':height};
};

SN.Page.center = function(dimensions) {
    if (!dimensions) {
        dimensions = { 'width': 0, 'height': 0 };
    }

    var offsetX = 0;
    var offsetY = 0;

    // IE
    if (!window.pageYOffset) {
        if (document.documentElement.scrollTop) {
            // Strict
            offsetX = document.documentElement.scrollLeft;
            offsetY = document.documentElement.scrollTop;
        } else {
            // Quirks
            offsetX = document.body.scrollLeft;
            offsetY = document.body.scrollTop;
        }
    } else {
        // W3C
        offsetX = window.pageXOffset;
        offsetY = window.pageYOffset;
    }

    var size = SN.Page.size();

    var posX = (size.width / 2 - dimensions.width / 2) + offsetX;
    var posY = (size.height / 2 - dimensions.height / 2) + offsetY;

    return { 'posX': posX, 'posY': posY };
};

SN.Page.getElementXY = function(obj) {
	var curX = 0;
	var curY = 0;
	if (obj.offsetParent) {
		do {
			curX += obj.offsetLeft;
			curY += obj.offsetTop;
		}
		while (obj = obj.offsetParent);
		return {'posX':curX, 'posY':curY};
	}
	return {'posX':-1, 'posY':-1};
};

SN.Page.getRelativeXY = function(container, obj) {
	var coordCont = SN.Page.getElementXY(container);
	var coordObj = SN.Page.getElementXY(obj);
	return {'posX':coordObj.posX - coordCont.posX, 'posY':coordObj.posY - coordCont.posY};
};

/* The following needs some type of events in order to work! */
SN.Page.getMouseXY = function(e) {
	var posX = 0;
	var posY = 0;
	
	if (!e) {
		e = window.event;
	}
	if (e.pageX || e.pageY) {
		posX = e.pageX;
		posY = e.pageY;
	} else if (e.clientX || e.clientY) {
		posX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
		posY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
	} else {
		alert("SN.Page.getMouseXY: Error");
	}
	return {'posX':posX, 'posY':posY};
};
