var thisNamespace = 'lib.Helper';
var thisPackage = {

	getWindowScroll: function(parent) {

		var T, L, W, H;
		parent = parent || document.body;
		if (parent != document.body) {
			T = parent.scrollTop;
			L = parent.scrollLeft;
			W = parent.scrollWidth;
			H = parent.scrollHeight;
		} else {
			var w = window;
			with (w.document) {
				if (w.document.documentElement && documentElement.scrollTop) {
					T = documentElement.scrollTop;
					L = documentElement.scrollLeft;
				} else if (w.document.body) {
					T = body.scrollTop;
					L = body.scrollLeft;
				}

				if (w.innerWidth) {
					W = w.innerWidth;
					H = w.innerHeight;
				} else if (w.document.documentElement
						&& documentElement.clientWidth) {
					W = documentElement.clientWidth;
					H = documentElement.clientHeight;
				} else {
					W = body.offsetWidth;
					H = body.offsetHeight
				}
			}
		}
		return {
			top :T,
			left :L,
			width :W,
			height :H
		};
	},

	getPageSize: function(parent) {

		parent = parent || document.body;

		var windowWidth, windowHeight;
		var pageHeight, pageWidth;

		if (parent != document.body) {
			windowWidth = parent.getWidth();
			windowHeight = parent.getHeight();
			pageWidth = parent.scrollWidth;
			pageHeight = parent.scrollHeight;
		} else {

			var xScroll, yScroll;

			if (window.innerHeight && window.scrollMaxY) {
				xScroll = document.body.scrollWidth;
				yScroll = window.innerHeight + window.scrollMaxY;
			} else if (document.body.scrollHeight > document.body.offsetHeight) { // all
																					// but
																					// Explorer
																					// Mac
				xScroll = document.body.scrollWidth;
				yScroll = document.body.scrollHeight;
			} else { // Explorer Mac...would also work in Explorer 6 Strict,
						// Mozilla and Safari
				xScroll = document.body.offsetWidth;
				yScroll = document.body.offsetHeight;
			}

			if (self.innerHeight) { // all except Explorer
				windowWidth = self.innerWidth;
				windowHeight = self.innerHeight;
			} else if (document.documentElement
					&& document.documentElement.clientHeight) { // Explorer 6
																// Strict Mode
				windowWidth = document.documentElement.clientWidth;
				windowHeight = document.documentElement.clientHeight;
			} else if (document.body) { // other Explorers
				windowWidth = document.body.clientWidth;
				windowHeight = document.body.clientHeight;
			}

			// for small pages with total height less then height of the
			// viewport
			if (yScroll < windowHeight) {
				pageHeight = windowHeight;
			} else {
				pageHeight = yScroll;
			}

			// for small pages with total width less then width of the viewport
			if (xScroll < windowWidth) {
				pageWidth = windowWidth;
			} else {
				pageWidth = xScroll;
			}
		}
		return {
			pageWidth :pageWidth,
			pageHeight :pageHeight,
			windowWidth :windowWidth,
			windowHeight :windowHeight
		};
	},

	/**
	 * IE only: Hide all selectboxes, except those in the lightbox. 
	 */
	hideSelectBoxes: function() {
		if (Prototype.Browser.IE) {
			$$("select").each( function(element) {
				element.style.visibility = "hidden";
			});
			$$("#lightbox select").each( function(element) {
				element.style.visibility = "visible";
			});
		}
	},

	/**
	 * IE only: Show all selectboxes. Counterpart of hideSelectBoxes.
	 */
	showSelectBoxes: function() {
		if (Prototype.Browser.IE) {
			$$("select").each( function(element) {
				element.style.visibility = "visible";
			});
		}
	},
	
	getIFrameContentElement: function(iframe) {
		
		var element = iframe.contentWindow.document.body || iframe.contentWindow.document.documentElement;
		
		if (iframe && element && element.firstChild) {
			return element.firstChild.cloneNode(true);
		}
		
		return null;
	},
	
	/**
	 * Extracts an javascript object from string.
	 * 
	 * <a href="javascript:void({param:value});">... returns {param:value}
	 *
	 * Note, that in href no spaces allowed
	 *
	 * @param String value
	 */
	extractObject: function(value) {
		
		var object = null;
		var matches = value.match(new RegExp("{[^}]*}"));
		
		if (matches) {
			object = eval( '(' + matches[0] + ')' );
		}
		
		return object;
	}
};
addPackage(thisNamespace, thisPackage);