function getElementsByClass(searchClass,node,tag) 
{
	var classElements = new Array();
	if ( node == null )
	node = document;
	if ( tag == null )
	tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

function checkAllByClass(c)
{
	var elements = getElementsByClass(c,document,'input');
	if(elements!=null)
	{
		for(var i = 0; i<elements.length; i++)
		{
			var element = elements[i];
			element.checked=true;
		}
	}
}

function uncheckAllByClass(c)
{
	var elements = getElementsByClass(c,document,'input');
	if(elements!=null)
	{
		for(var i = 0; i<elements.length; i++)
		{
			var element = elements[i];
			element.checked=false;
		}
	}
}

function checkToggleByClass(c)
{
	var elements = getElementsByClass(c,document,'input');
	if(elements!=null)
	{
		for(var i = 0; i<elements.length; i++)
		{
			var element = elements[i];
			if(element.checked==true)
			{
				element.checked=false;
			}
			else
			{
				element.checked=true;
			}
		}
	}
}

function highlightRow(rowName,color)
{
	var rows = document.getElementsByName(rowName);
	var row = rows[0];
	if(row!=null)
	{
		for(var i =0; i< row.cells.length; i++)
		{
			row.cells[i].style.backgroundImage='none';
			row.cells[i].style.backgroundColor=color;
		}
	}
}
function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)    {     curleft += obj.offsetLeft;      obj = obj.offsetParent;   }
	}
	else if (obj.x)   curleft += obj.x;
		return curleft;
}


function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)    {     curtop += obj.offsetTop;      obj = obj.offsetParent;   }
	}
	else if (obj.y)   curtop += obj.y;
	return curtop;
}


function showElement(elementID,baseElementID,w,h)
{
	var baseElement = document.getElementById(baseElementID);
	var elt = document.getElementById(elementID);
	if(baseElement!=null && elt!=null)
	{
		imageWidth = baseElement.offsetWidth;
		imageHeight = baseElement.offsetHeight;
		elt.style.left=findPosX(baseElement)+(imageWidth/2)-(w/2)+'px';
		elt.style.top=findPosY(baseElement) + imageHeight/2 -(h/2) +'px';
		new Effect.Appear(elt);
		new Draggable(elt,{revert:false});
	}
}

function hideElement(elementID)
{
	var elt = document.getElementById(elementID);
	new Effect.Fade(elt);
}

function borderOn(eltID)
{
	var elt = document.getElementById(eltID);
	if(elt!=null) elt.style.border='solid black 1px;';
}

function borderOff(eltID)
{
	var elt = document.getElementById(eltID);
	if(elt!=null) elt.style.border='solid #aaa 1px;';
}

function ShakeIt(eltID)
{
	new Effect.Shake(eltID,{duration: 2.0});
	new Effect.Highlight(eltID,{duration: 2.0, startcolor:'#ffffff', endcolor:'#ff8800'});
}

function toggleVisibility(idc)
{
	var elt = document.getElementById(idc);
	if(elt.style.visibility=='hidden')
	{
		elt.style.position='relative';
		elt.style.visibility='visible';
	}
	else
	{
		elt.style.position='absolute';
		elt.style.visibility='hidden';
	}
}

function toggleVisibilitySlide(detectId,expandId,openId,closeId)
{
	SlideDur = 0.2 // Panel slide duration

	detectId = $(detectId); // So we can detect if the panel is currently visible or not before we run the condition
	expandId = $(expandId); // The panel we want to expand
	openId = $(openId); // The element we click on to open a panel, in this case the plus icon
	closeId = $(closeId); // The element we click on to close a panel, in this case the plus icon
	if(detectId.visible(detectId))
	{
		openId.style.display='block';
		closeId.style.display='none';
		new Effect.SlideUp(expandId,{duration:SlideDur });
	}
	else
	{
		openId.style.display='none';
		closeId.style.display='block';
		new Effect.SlideDown(expandId,{duration:SlideDur});
	}
}

function toggleVisibilitySlideByClass(detectId,elementClass,openId,closeId)
{
	SlideDur = 0.2 // Panel slide duration
	
	detectId = $(detectId); // So we can detect if the panel is currently visible or not before we run the condition
	openId = $(openId); // The element we click on to open a panel, in this case the plus icon
	closeId = $(closeId); // The element we click on to close a panel, in this case the plus icon
	var show=true;
	if(detectId.style.display=='none')
	{
		openId.style.display='block';
		closeId.style.display='none';
		show=true;
	}
	else
	{
		openId.style.display='none';
		closeId.style.display='block';
		show=false;
	}
	var elements = getElementsByClass(elementClass);
	if(elements!=null && elements.length>0)
	{
		for(var i =0; i<elements.length;i++)
		{
			expandId=elements[i];
			if(expandId!=null)
			{
				if(show)
				{
					new Effect.SlideUp(expandId,{duration:SlideDur });
				}
				else
				{
					new Effect.SlideDown(expandId,{duration:SlideDur});
				}
			}
		}
	}
}