
if(!aiviki.util)
	{
	aiviki.util=new Object();



	aiviki.util.getEX= function(obj)
		{
		var x =0;
		x+=obj.offsetWidth;
		while(obj.offsetParent != null)
			{
			x += obj.offsetLeft;
			obj = obj.offsetParent;
			}
		x += obj.offsetLeft;
		return x;
		}

	aiviki.util.getEY= function(obj)
		{
		var y = 0;
		y+= obj.offsetHeight;
		while(obj.offsetParent != null)
			{
			y += obj.offsetTop;
			obj = obj.offsetParent;
			}
		y += obj.offsetTop;
		return y;
		}

	aiviki.util.getY= function(obj)
		{
		var y = 0;
		while(obj.offsetParent != null)
			{
			y += obj.offsetTop;
			obj = obj.offsetParent;
			}
		y += obj.offsetTop;
		return y;
		}



	aiviki.util.getX= function(obj)
		{
		var x =0;
		while(obj.offsetParent != null)
			{
			x += obj.offsetLeft;
			obj = obj.offsetParent;
			}
		x += obj.offsetLeft;
		return x;
		}
	aiviki.util.snid=0;
	aiviki.util.getSN =function(obj)
		{

		return obj.ClassId+(aiviki.util.snid++);
		}

	aiviki.util.vector = 	aiviki.Class.create("aiviki.util.vector");
	aiviki.util.vector.prototype = {
	init:function(inc)
		{
		this.increment=inc;
		this.size=0;
		this.data = new Array(inc);
		},
	getCapacity:function()
		{
		return this.data.length;
		},
	getSize:function()
		{
		return this.size;
		},
  isEmpty:function()
		{
		return this.getSize() == 0;
		},
 get:function(i)
		{
		try
			{
			return this.data[i];
			} 
		catch(e)
			{
			return "Exception " + e + " occured when accessing " + i;	
			}	
		},
 indexOf:function(obj)
		{
		for(var i=0; i<this.getSize(); i++)
			{
			if(this.data[i] == obj)
				{
				return i;
				}
			}
		return -1;
		},
	resize:function() 
		{
		var newData = new Array(this.data.length + this.increment);
		for	(var i=0; i< this.data.length; i++)
			{
			newData[i] = this.data[i];
			}
		this.data = newData;
		},
	overwriteAt:function(obj,i)
		{
		this.data[i] = obj;
		},
	add:function(obj)
		{
		if(this.getSize() == this.data.length)
			{
			this.resize();
			}
		this.data[this.size++] = obj;
		},
	insert:function(obj,index)
			{
			try 
				{
				if(this.size == this.capacity)
					{
					this.resize();
					}
				for(var i=this.getSize(); i > index; i--)
					{
					this.data[i] = this.data[i-1];
					}
				this.data[index] = obj;
				this.size++;
				}
			catch(e)
				{
				return "Invalid index " + i;
				}
			},
	removeByObj:function(obj)
			{
			var vg=-1;
			for(var i=0; i<this.getSize(); i++)
				{
				if(this.data[i] == obj)
					{
					try
						{
						var element = this.data[i];
						for(var ii=i; ii<(this.getSize()-1); ii++) 
							this.data[ii] = this.data[ii+1];
						this.data[getSize()-1] = null;
						this.size--;
						return element;
						}catch(e){
						return "Invalid index " + i;
						}
					}
				}
			},
	removeByIndex:function(index)
			{

			try
				{
				var element = this.data[index];
				for(var ii=index; ii<(this.getSize()-1); ii++) 
					this.data[ii] = this.data[ii+1];
				this.data[this.getSize()-1] = null;
				this.size--;
				return element;
				}catch(e){
				return "Invalid index " + index;
				}

			},
	removeAll:function()
			{
			this.size = 0;
			for (var i=0; i<this.data.length; i++)
				{
				this.data[i] = null;
				}
			}
		}
	


	aiviki.util.getPgsize=function()
		{
	
		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;
			}
		
		var windowWidth, windowHeight;
		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;
			}


		arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
		return arrayPageSize;
		}

	}