function Browser()
{ 
	this.version	= navigator.appVersion;
	this.agent		= navigator.userAgent;
	this.dom		= document.getElementById?1:0;
	this.opera5		= this.agent.indexOf("Opera 5")>-1;
	this.ie4		= (document.all && !this.dom && !this.opera5)?1:0;
	this.ie5		= (this.version.indexOf("MSIE 5")>-1 && this.dom && !this.opera5)?1:0; 
	this.ie6		= (this.version.indexOf("MSIE 6")>-1 && this.dom && !this.opera5)?1:0;
	this.ie7		= (this.version.indexOf("MSIE 7")>-1 && this.dom && !this.opera5)?1:0;
	this.ie			= this.ie4||this.ie5||this.ie6||this.ie7;
	this.mac		= this.agent.indexOf("Mac")>-1;
	this.ns6		= (this.dom && parseInt(this.version) >= 5) ?1:0; 
	this.ns4		= (document.layers && !this.dom)?1:0;
	this.bw			= (this.ie7 || this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera5);
	return this;
}

browser = new Browser();

function setCookie(name, value, expirydays, path)
{
	var expiry = "";
	
	if(name == "")
		return;

	if(expirydays > 0)
	{
		var	expiryDate = new Date();
		
		expiryDate.setTime(expiryDate.getTime() + (expirydays * 24 * 60 * 60 * 1000));
		
		expiry = expiryDate.toGMTString();
	}
	
	var cookieString = name + "=" + escape(value) +
					   ((expiry == "") ? "" : ("; expires=" + expiry)) +
					   ((path == "")   ? "" : ("; path=" + path));
	
	document.cookie = cookieString;
}

function getCookie(name)
{
	var arg = name + "=";
	var arglength = arg.length;
	var cookielength = document.cookie.length;
	var i = 0;
	
	while(i < cookielength)
	{
		var j = i + arglength;
		
		if(document.cookie.substring(i, j) == arg)
		{
			k = document.cookie.indexOf(";", j);
			
			if(k < 0)
			{
				k = cookielength;
			}
			
			return unescape(document.cookie.substring(j, k));
		}
			
		i = document.cookie.indexOf(" ", i) + 1;
		
		if(i == 0)
		{
			break;
		}
	}
	
	return "";
}

function alertNames(obj)
{
	var names = "";
	
	for (var i in obj)
	{
		names += i + ", ";
	}
	
	alert(names);
}

function alertValues(obj)
{
	var names = "";
	
	for (var i in obj)
	{
		if( obj[i])
		{
			names += i + "=[" + obj[i] + "], ";
		}
	}
	
	alert(names);
}

if(browser.ie && !browser.ie7)
{
	window.attachEvent("onload", fixPNG);
	
	for(var i = 0; i < document.styleSheets.length; i++)
	{
		for(var j = 0; j < document.styleSheets[i].rules.length; j++)
		{
			if(document.styleSheets[i].rules[j].selectorText == ".png")
			{
				document.styleSheets[i].rules[j].style.visibility = 'hidden';
			}
		}
	}
}

function fixPNG()
{
	if(browser.ie && !browser.ie7)
	{
		for(var i = 0; i < document.all.length; i++)
		{
			var element = document.all[i];
			
			if(element.className.indexOf('png') >= 0 && element.tagName == 'IMG')
			{
				fixSinglePNG(element);
			}
			else if(element.className.indexOf('png') >= 0)
			{
				fixBackgroundPNG(element);
			}
		}
	}
}

function fixSinglePNG(element) 
{
	if(browser.ie && !browser.ie7)
	{
		if(element)
		{
			var width = element.width;
			var height = element.height;
			var source = element.src;
			
			element.src = '/server/images/spacer.gif?version=1';
			element.width = width;
			element.height = height;
			element.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + source + "', sizingMethod='image', enabled='true')";
			element.style.visibility = 'visible';
		}
	}
}

function fixBackgroundPNG(element) 
{
	if(browser.ie && !browser.ie7)
	{
		if(element)
		{
			var bg = element.currentStyle.backgroundImage;
			var img = bg.substring(5,bg.length-2);
			var position = element.style.backgroundPosition;
			
			element.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+img+"', sizingMethod='scale')";
			element.style.backgroundImage = "url('/server/images/spacer.gif?version=1')";
			element.style.backgroundPosition = position; // reapply
			element.style.visibility = 'visible';
		}
	}
}

function autoResize()
{
	if(browser.ie)
	{
		window.resizeBy(document.body.scrollWidth - document.body.clientWidth, document.body.scrollHeight - document.body.clientHeight);
	}
	else
	{
		var maxWidth = 0;
		var maxHeight = 0;
		
		for(var i = 0; i < document.body.childNodes.length; i++)
		{		
			if(document.body.childNodes[i].offsetWidth)
			{
				var width = document.body.childNodes[i].offsetLeft + document.body.childNodes[i].offsetWidth;
				var height = document.body.childNodes[i].offsetTop + document.body.childNodes[i].offsetHeight;
				
				if(width > maxWidth)
				{
					maxWidth = width;
				}
				
				if(height > maxHeight)
				{
					maxHeight = height;
				}
			}
		}

		var extraY = window.outerHeight - window.innerHeight;
		
		var extraX = window.outerWidth - window.innerWidth;
		
		if(extraX < 0)
		{
			extraX *= -1;
		}

		window.resizeTo(maxWidth + extraX, maxHeight + extraY);
	}
}

function maxLength(inEvent, inElement, inLength)
{
	if(browser.ie)
	{
		;
	}
	else
	{
		if(inElement.selectionStart != inElement.selectionEnd)
		{
			return true;
		}
		else if(inEvent.which == 0 || inEvent.which == inEvent.DOM_VK_BACK_SPACE)
		{
			return true;
		}
	}
	
	if(inElement.value.length >= inLength)
	{
		inElement.value = inElement.value.substring(0, inLength);
		
		return false;
	}
	
	return true;
}

function trimLength(element, length)
{
	if(element.value.length >= length)
	{
		element.value = element.value.substring(0, length);
	}
}

function Message(inName, inMessage)
{
	this.name = inName;
	this.message = inMessage;
}

var messages = new Array();

function addMessage(inName, inMessage)
{
	messages[messages.length] = new Message(inName, inMessage);
}

function getMessage(inName)
{
	for(i = 0; i < messages.length; i++)
	{
		if(messages[i].name == inName)
		{
			return messages[i].message;
		}
	}
}

function preventEvent(event)
{
	if(event.preventDefault)
	{
		event.preventDefault();
	}
	else
	{
		event.returnValue = false;
	}
}

function cancelEvent(event)
{
	if(!event)
	{
		event = window.event;
	}

	if(event.stopPropagation)
	{
		event.stopPropagation();
	}
	else
	{
		event.cancelBubble = true;
	}
	
	if(browser.ie)
	{
		var targetElement = event.srcElement;
	}
	else
	{
		var targetElement = event.target || event.srcElement;
	}
	
	return false;
}

function addEvent(obj, type, fn)
{
	if (obj.attachEvent)
	{
		obj['e'+type+fn] = fn;
		obj[type+fn] = function(e){obj['e'+type+fn](e);}
		obj.attachEvent( 'on'+type, obj[type+fn] );
	}
	else
	{
		obj.addEventListener( type, fn, false );
	}
}
	
function removeEvent(obj, type, fn)
{
	if(obj.detachEvent)
	{
		obj.detachEvent( 'on'+type, obj[type+fn] );
		obj[type+fn] = null;
		obj['e'+type+fn] = null;
	}
	else
	{
		obj.removeEventListener( type, fn, false );
	}
}
