var browserObj = {};

	
	//Browser Type	
	browserObj.is_IE = function ()
					{
						return ( typeof document.all != "undefined" );
					}
					
	browserObj.is_IE_strict = function ()
					{
						if (this.is_IE())
						{
							return document.compatMode ? (document.compatMode != "BackCompat") : false;
						} else {
							return false;
						}
					}
					
	browserObj.is_legacy_browser = function ()
					{
						return (typeof window.XMLHttpRequest == "undefined");
					}
					
	browserObj.match_browser = function (name)
					{
						return (navigator.userAgent.indexOf(name) != -1);
					}
					
	browserObj.is_mobile_device = function ()
					{
						var return_value = false;
						
						var mobile_device_list = new Array(/Android/i, /webOS/i, /iPhone/i, /iPad/i, /iPod/i);
						
						for (i = 0; i < mobile_device_list.length; i++)
						{
							return_value = return_value || navigator.userAgent.match(mobile_device_list[i]);
						}
						return return_value;
					}
	
	browserObj.is_windows = function ()
					{
						return (navigator.platform.indexOf("Win") != -1);
					}
	
	browserObj.is_mac = function ()
					{
						return (navigator.platform.indexOf("Mac") != -1);
					}
					
	//Attach Event
	browserObj.AddEventListener = function (eventType, listenerFunction)
					{
						var legacy_eventType = "";
						switch (eventType)
						{
						case "DOMContentLoaded":
							legacy_eventType = "onload";
							break;
						case "blur":
						case "unload":
						case "focus":
						case "change":
						case "mouseover":
						case "mouseout":
						case "mousemove":
						case "mousedown":
						case "mouseup":
						case "click":
						case "dblclick":
						case "keydown":
						case "keyup":
						case "keypress":
						case "submit":
						case "load":
						
						case "resize":
							legacy_eventType = "on" + eventType;
							break;
						}
						
						if (window.addEventListener)
						{
							window.addEventListener(eventType, listenerFunction, false);
						} else if (document.addEventListner) {
							document.addEvenetListener(eventType, listenerFunction, false);
						} else if (window.attachEvent) {
							window.attachEvent(legacy_eventType, listenerFunction);
						}
					}
					
					
	//Browser Inner Dimension
	browserObj.width = 0;
	browserObj.height = 0;
	browserObj.pagewidth = 0;
	browserObj.pageheight = 0;
	browserObj.update = function ()
					{
						var iebody = this.is_IE() ? (this.is_IE_strict() ? document.documentElement : document.body) : null;
						
						this.width = (typeof window.innerWidth) != "undefined" ? window.innerWidth : iebody.clientWidth;
						this.height =(typeof window.innerHeight) != "undefined" ? window.innerHeight : iebody.clientHeight;
					}
	
	//Initialize Browser Inner Dimension
	browserObj.AddEventListener ("DOMContentLoaded", function () { browserObj.update.call(browserObj);});
	browserObj.AddEventListener ("resize", function () { browserObj.update.call(browserObj);});
	
	//Browser Mouse Position
	browserObj.mouseX = 0;					
	browserObj.mouseY = 0;
	
	browserObj.mouseXYupdate = function(eventHnd)
					{
						eventHnd = eventHnd || event;
						
						if (eventHnd.pageX && eventHnd.pageY)
						{
							this.mouseX = eventHnd.pageX - window.pageXOffset
							this.mouseY = eventHnd.pageY - window.pageYOffset
						} else {
							this.mouseX = eventHnd.clientX;
							this.mouseY = eventHnd.clientY;
						}
						 
						this.mouseX = (this.mouseX < 0) ? 0 : this.mouseX;
						this.mouseY = (this.mouseY < 0) ? 0 : this.mouseY;
					}
	
	//The following line mysteriously refuses to fire up in IE.
	//browserObj.AddEventListener ("mousemove", function (eventHnd) { browserObj.mouseXYupdate.call(browserObj, eventHnd); });
	document.onmousemove = function (eventHnd) { browserObj.mouseXYupdate.call(browserObj, eventHnd) };
	
	//Element client Position
	browserObj.elementclientPosition = function (element)
					{
						var xpos = 0;
						var ypos = 0;
						
						while (element != null)
						{
							xpos += element.offsetLeft;
							ypos += element.offsetTop;
							
							element = element.offsetParent;
						}
						return {"X":xpos, "Y":ypos, "x":xpos, "y":ypos};
					}
					
	browserObj.elementclientLeft = function (element)
					{
						return this.elementclientPosition(element)["X"];
					}
					
	browserObj.elementclientTop = function (element)
					{
						return this.elementclientPosition(element)["Y"];
					}
					
	//Window Position
	browserObj.windowXpos = function ()
					{
						if (window.screenX)
						{
							return window.screenX;
						} else {
							return window.screenLeft;
						}
					}
	
	browserObj.windowYpos = function ()
					{
						if (window.screenY)
						{
							return window.screenY;
						} else {
							return window.screenTop;
						}
					}
	
	browserObj.windowWidth = function ()
					{
						return window.outerWidth;
					}
					
	browserObj.windowHeight = function ()
					{
						return window.outerHeight;
					}
					
	browserObj.windowMaximized = function ()
					{
						var return_value = true;
						return_value = return_value && (browserObj.windowXpos() <= 0);
						return_value = return_value && (browserObj.windowYpos() <= 0);
						return_value = return_value && (browserObj.windowWidth() >= screen.availWidth);
						return_value = return_value && (browserObj.windowHeight() >= screen.availHeight);
						return return_value;
					}
	
	//Browser Scroll Position
	browserObj.scrollXpos = function ()
					{
						var iebody = this.is_IE() ? (this.is_IE_strict() ? document.documentElement : document.body) : null;
						return (typeof window.pageXOffset)!="undefined" ? window.pageXOffset : iebody.scrollLeft;
					}
					
	browserObj.scrollYpos = function ()
					{
						var iebody = this.is_IE() ? (this.is_IE_strict() ? document.documentElement : document.body) : null;
						return (typeof window.pageYOffset)!="undefined" ? window.pageYOffset : iebody.scrollTop;
					}
		
	//Procedures: scroll to a desinated position
	browserObj.scrollToX = function (xpos)
					{
						window.scroll(xpos, this.scrollYpos());
					}
					
	browserObj.scrollToY = function (ypos)
					{
						window.scroll(this.scrollXpos(), ypos);
					}
					
	//Procedures: scroll for a certain amount
	browserObj.scrollForX = function (xamount)
					{
						this.scrollToX(this.scrollXpos() + xamount);
					}
	
	browserObj.scrollForY = function (yamount)
					{
						this.scrollToY(this.scrollYpos() + yamount);
					}
					
