/*---------------------------------------------------------------------------

Titel: Detail Page Builder From Form
Versie: 1.1 beta

Doel: Systeem wat automatisch een formulier pagina om kan zetten naar een 
detail pagina zo dat er minder pagina's nodig zijn

Datum: 17 maart 2008
Door: Alex Damen

Extra om alles direct te laden:
window.onload=function(){
 changeGroupVisibility('groepNaam','hidden');
}

Hoe te defineren:
<input type="text" fVgroup="groepNaam" value="test" />

----------------------------------------------------------------------------*/
function changeGroupVisibility(group,status,buttons,byFieldset)
{
	if(buttons == null || buttons == true)
	{
		buttons = true;
	}
	else
	{
		buttons = false;
	}
	if(byFieldset == null || byFieldset == false)
	{
		byFieldset = false;
	}
	else
	{
		byFieldset = true;
	}
	changeItemVisibility('input',group,status,buttons,byFieldset);
	changeItemVisibility('textarea',group,status,buttons,byFieldset);
	changeItemVisibility('select',group,status,buttons,byFieldset);
}

function changeItemVisibility(type,group,status,buttons,byFieldset)
{
	elements = document.getElementsByTagName(type);
	var label = new Array();
	var labelElements = new Array();
	var imageElements = new Array();
	var linkElements = new Array();
	
	for (var i=0;i<elements.length;i++)
	{
		if(elements[i].getAttribute('fVgroup') == group)
		{
			if(status == 'hidden' || elements[i].getAttribute('fVstatus') == 'visible' || (elements[i].getAttribute('fVstatus') == null && status != 'visible'))
			{
				elements[i].setAttribute('fVstatus','hidden');
				elements[i].style.display = 'none';
				changeItemVisibilityReplacement(group,'hide',elements[i].parentNode);
				if(type == 'input' || type == 'textarea' || type == 'select')
				{
					labelElements[i] = elements[i].parentNode.getElementsByTagName('var');
					if(labelElements[i].length == 0)
					{							
						if(buttons == true)
						{
							linkElements[i] = document.createElement("a");
							linkElements[i].setAttribute("href","javascript:changeGroupVisibility('"+group+"');");
							linkElements[i].setAttribute('fVgroup',group);
							if(byFieldset == false)
							{
								linkElements[i].style.display = "block";
								linkElements[i].style.styleFloat = "right";
								elements[i].parentNode.insertBefore(linkElements[i],elements[i]); 
							}
							else
							{
								fieldsetElements = elements[i];
								
								while(fieldsetElements.parentNode)
								{
									fieldsetElements = fieldsetElements.parentNode;
									
									if(fieldsetElements.nodeName == 'FIELDSET')
									{
										legendElements = fieldsetElements.getElementsByTagName('legend');
										
										buttonElements = legendElements[0].getElementsByTagName('a');
										if(buttonElements.length == 0 || buttonElements[0].getAttribute('fVgroup') != group)
										{
											legendElements[0].appendChild(linkElements[i]); 
										}
										break;
									}
								}
							}
							
							imageElements[i] = document.createElement("img");
							imageElements[i].setAttribute("src","images/edit.gif");
							imageElements[i].setAttribute("border","0");
							imageElements[i].setAttribute("alt","[edit]");
							imageElements[i].setAttribute("align","absmiddle");
							imageElements[i].style.paddingLeft = "5px";
							linkElements[i].appendChild(imageElements[i]);	
						}
						
						label[i] = document.createElement("var");
						label[i].setAttribute('fVgroup',group);
						label[i].style.display = "inline";
						if(type == 'select')
						{
							label[i].innerHTML = elements[i].options[elements[i].selectedIndex].text.replace(/([^>])\n/g, '$1<br/>');;
						}
						else
						{
							label[i].innerHTML = elements[i].getAttribute('value').replace(/([^>])\n/g, '$1<br/>');;
						}
						elements[i].parentNode.insertBefore(label[i],elements[i]); 
					}
					
					imageElements = elements[i].parentNode.getElementsByTagName('img');
					if(imageElements.length == 1)
					{
						imageElements[0].setAttribute("src","images/edit.gif");
						imageElements[0].setAttribute("alt","[edit]");
					}
					else
					{
						fieldsetElements = elements[i];
						
						while(fieldsetElements.parentNode)
						{
							fieldsetElements = fieldsetElements.parentNode;
							
							if(fieldsetElements.nodeName == 'FIELDSET')
							{
								legendElements = fieldsetElements.getElementsByTagName('legend');
								
							imageElements = legendElements[0].getElementsByTagName('img');
							if(imageElements.length > 0)
							{
								imageElements[0].setAttribute("src","images/edit.gif");
								imageElements[0].setAttribute("alt","[edit]");
							}
								break;
							}
						}
					}
				}
			}
			else
			{
				elements[i].setAttribute('fVstatus','visible');
				elements[i].style.display = 'inline';
				changeItemVisibilityReplacement(group,'show',elements[i].parentNode);
					
		
				imageElements = elements[i].parentNode.getElementsByTagName('img');
				if(imageElements.length == 1)
				{
					imageElements[0].setAttribute("src","images/detail.gif");
					imageElements[0].setAttribute("alt","[detail]");
				}
				else
				{
					fieldsetElements = elements[i];
					
					while(fieldsetElements.parentNode)
					{
						fieldsetElements = fieldsetElements.parentNode;
						
						if(fieldsetElements.nodeName == 'FIELDSET')
						{
							legendElements = fieldsetElements.getElementsByTagName('legend');
							
							imageElements = legendElements[0].getElementsByTagName('img');
							if(imageElements.length > 0)
							{
								imageElements[0].setAttribute("src","images/detail.gif");
								imageElements[0].setAttribute("alt","[detail]");
							}
							break;
						}
					}
				}
			}
		}
	}
}

function changeItemVisibilityReplacement(group,status,source)
{
	labelElements = source.getElementsByTagName('var');
	
	for (var i=0;i<labelElements.length;i++)
	{
	
		if(labelElements[i].getAttribute('fVgroup') == group)
		{
			if(status == 'hide')
			{
				labelElements[i].style.display = 'inline';
			}
			else
			{
				labelElements[i].style.display = 'none';
			}
		}
		
	}
}
