function Size(w, h)
{
	this.h = h;
	this.w = w;
}

//Finding the size of the browser window
//tries parent window if there is one
function getParentWindowSize()
{
	return(getWindowSize(parent));
}

//Finding the size of the browser window
function getWindowSize(parentobj)
{
	var winsize = new Size(0, 0);

	var winobj = parentobj?parentobj:window;

	if(typeof(window.innerWidth) == 'number')
	{
		winsize.w = winobj.innerWidth;
		winsize.h = winobj.innerHeight;
		//Firefox
	}
	else if(winobj.document.documentElement && winobj.document.documentElement.clientWidth)
	{
		winsize.w = winobj.document.documentElement.clientWidth;
		winsize.h = winobj.document.documentElement.clientHeight;
		//IE7
	}		
	else if(winobj.document.body)
	{
		winsize.w = winobj.document.body.clientWidth;
		winsize.h = winobj.document.body.clientHeight;
		//IE7
	}

	return(winsize);
}

//Finding how far the window has been scrolled
//tries parent window if there is one
function getParentScrollSize()
{
	return(getScrollSize(parent));
}

//Finding how far the window has been scrolled
function getScrollSize(parentobj)
{
	var winobj = parentobj?parentobj:window;
	
	var scrollsize = new Size(0,0);
	
	if( typeof( winobj.pageYOffset ) == 'number' )
	{
		//Netscape compliant
		scrollsize.h = winobj.pageYOffset;
		scrollsize.w = winobj.pageXOffset;
	}
	if( winobj.document.body && ( winobj.document.body.scrollLeft || winobj.document.body.scrollTop ) )
	{
		//DOM compliant
		scrollsize.h = winobj.document.body.scrollTop;
		scrollsize.w = winobj.document.body.scrollLeft;
	}
	else if( winobj.document.documentElement && ( winobj.document.documentElement.scrollLeft || winobj.document.documentElement.scrollTop ) )
	{
		//IE6 standards compliant mode
		scrollsize.h = winobj.document.documentElement.scrollTop;
		scrollsize.w = winobj.document.documentElement.scrollLeft;
	}
	
	return(scrollsize);
}

function getParentPosition(frameid)
{
	var pos = new Size(0,0);
	if(frameid)
	{
		if(parent)
		{
			var frameobj = parent.document.getElementById(frameid);
			if(frameobj)
			{
				pos = getPosition(frameobj);
			}
		}
	}	
	return(pos);
}

function getPosition(ele)
{
	var pos = new Size(0,0);
	while( ele )
	{
		pos.h += ele.offsetTop;
		pos.w += ele.offsetLeft;
		ele = ele.offsetParent;
	}
	return pos;
}

//viewportsize
function getDocumentSize(documentele)
{
	if(!documentele)
	{
		documentele = document;
	}

	var docsize = new Size(0,0);

	if(documentele.documentElement &&
		 documentele.documentElement.scrollHeight > documentele.body.scrollHeight ||
		 documentele.documentElement.scrollWidth > documentele.body.scrollWidth)
	{
		docsize.w = documentele.documentElement.scrollWidth;
		docsize.h = documentele.documentElement.scrollHeight;	
		//alert("1. " + docsize.w + " " + docsize.h);
  	}
	else if (documentele.body.scrollHeight > documentele.body.offsetHeight || documentele.body.scrollWidth > documentele.body.offsetWidth)
	{
		docsize.h = documentele.body.scrollHeight;
		docsize.w = documentele.body.scrollWidth; 
		if(documentele.body.scrollWidth > documentele.body.offsetWidth)
		{
			//has scroll bar, adding extra w to remove it.
			if(!isIE)
			{
				docsize.w = docsize.w + 10;
			}
		}
		//alert("2. " + docsize.w + " " + docsize.h);
	}
	else
	{ 
		docsize.h = documentele.body.offsetHeight;
		docsize.w = documentele.body.offsetWidth;
		//alert("3. " + docsize.w + " " + docsize.h);
  	}

	return(docsize);
}

function copyElementSize(pele, cele, padw, padh, maxw, maxh, minw, minh)
{
	var h = padh?padh:0;
	var w = padw?padw:0;
	
	h = (pele.offsetHeight + h > 0)?pele.offsetHeight + h : pele.offsetHeight;
	w = (pele.offsetWidth + w > 0)?pele.offsetWidth + w : pele.offsetWidth;
	h = (maxh && h > maxh) ? maxh : h;
	w = (maxw && w > maxw) ? maxw : w;	
	h = (minh && h < minh) ? minh : h;
	w = (minw && w < minw) ? minw : w;		

	cele.style.width = w + "px";
	cele.style.height = h + "px";	
}

function copyElementPosition(pele, cele, padw, padh)
{
	var h = padh?padh:0;
	var w = padw?padw:0;
	var pos = getPosition(pele);	
	cele.style.top = pos.h + h;		
	cele.style.left = pos.w + w;		
}

function getStyle(oElm, strCssRule)
{
	var strValue = "";
	try
	{
		if(strCssRule == "background-color")
		{
			if(oElm.style.backgroundColor)
			{
				strValue = oElm.style.backgroundColor;
			}
		}			
		else if(document.defaultView && document.defaultView.getComputedStyle)
		{
			strValue = document.defaultView.getComputedStyle(oElm, null).getPropertyValue(strCssRule);
		}		
		else if(oElm.currentStyle)
		{
			strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
				return p1.toUpperCase();
			});
			
			strValue = oElm.currentStyle[strCssRule];
			//alert(strCssRule);
			//alert(strValue);
		}			
	}
	catch(e)
	{
		//alert(strCssRule+" "+e);
	}
	return strValue;
}

function getPXNumber(s)
{
	return(s.substring(0, s.length-2));
}

//Stringbuffer
function StringBuffer(str)
{
	this.string = str?str:"";
}

StringBuffer.prototype.appendParameter = function(namestr, valuestr)
{
	if(this.string.length!=0)
	{
		this.string = this.string + "&";
	}
	this.string = this.string + encodeURIComponent(namestr) + 
	"=" +
	encodeURIComponent(valuestr);
}

StringBuffer.prototype.append = function(valuestr)
{
	this.string = this.string + valuestr;
}

function addEventListenerToElement(eleobj, eventname, eventfunc)
{
	if(eleobj.addEventListener)
	{
		eleobj.addEventListener(eventname, eventfunc, false);	
	}
	else
	{
		eleobj.attachEvent("on"+eventname, eventfunc);
	}
}

function addWindowEventListener(eventname, eventfunc)
{
	addEventListenerToElement(window, eventname, eventfunc);
}

function addDocumentEventListener(eventname, eventfunc)
{
	addEventListenerToElement(document, eventname, eventfunc);
}

function getEventElement(evt)
{
    if (evt)
    {
       var elem = (evt.target) ? evt.target : 
          ((evt.srcElement) ? evt.srcElement : null);
		return(elem);
    } 
    return(null);
}

var uiutilsLoaded = true;
