// Form validation library v1.0
// author: Micha Köpfli (m.koepfli@insign.ch) & Simon Häusermann (s.haeusermann@insign.ch)

// bei "help_elements" den Value auf allElements stzen => Hilfelayer bei allen Elementen des Arrays "all_elements" 

var frameWidth;
function newWidth()
{
	if(document.body)
		frameWidth=document.body.offsetWidth-20;
	else if(window.innerWidth)
		frameWidth=window.innerWidth-20;
}
help = false;
showIsComplete = false;
showIsOptional = false;

doCheck=(document.all || document.getElementById)?true:false;

initDone=new Array();
indexOfSubmit=new Array();
indexArray = new Array();

function initForm(formName,allFields,thisOnly)
{
	initString=(allFields)?allFields:false;
	for(i1 = 0; i1 <= document.forms.length-1; i1++)
	{
		if(formName)
			myForm = document.forms[formName];
		else
		{
			formName=false;
			myForm = document.forms[i1];
			indexArray[myForm.name]=new Array();
		}
		initDone[myForm.name]=(initDone[myForm.name])?true:false;
		indexOfSubmit[myForm.name]=myForm.elements.length;
		myForm.idNumber=i1;
		if(myForm.elements["all_elements"]||document.allFields)
		{
			if(allFields)
			{
				if(typeof allFields == "string")
					allFields = allFields.split(",");
			}
			else
				allFields = myForm.elements["all_elements"].value.split(",");
			for(i2=0;i2<allFields.length;i2++)
			{
				if(allFields[i2])
				{
					parts=allFields[i2].split(":");
					if (parts[2]=='radio' && myForm.elements[parts[0]][0])
						myElement=myForm.elements[parts[0]][0];
					else if(myForm.elements[parts[0]])
						myElement =myForm.elements[parts[0]];
					else 
						myElement=false;
					if(myElement)
					{
						myElement.parts = new Array();
						if(parts[3])
						{
							myElement.parts = new Array();
							{
								for(i3=3; i3<parts.length; i3++)
								myElement.parts[i3-3] = parts[i3];
							}
						}
						myElement.functionName = 'fcm_'+parts[2];
						myElement.fieldName = parts[1];
						myElement.helpTitle = "Angaben zum Feld '"+myElement.fieldName+"'";
						myElement=myForm.elements[parts[0]]
						if(myElement.type=='submit' || myElement.type=='reset')
							indexOfSubmit=m;
					}
				}
			}
		}
		for(i4=0;i4<myForm.elements.length;i4++)
		{
			myElement=myForm.elements[i4];
			if(!indexArray[myForm.name][myElement.name] && myElement.name)
				indexArray[myForm.name][myElement.name]=i4;
			if((myElement.type=='text' || myElement.type=='password' || myElement.type=='textarea' || myElement.type=='select-one') && !initDone[myForm.name])
			{
				changeClass(myElement,'formfull');
				myElement.onfocus = doFocus;
				myElement.onkeyup= doFocus;
				myElement.onclick= doFocus;
				myElement.onblur= doBlur;
			}
			else if(!initDone[myForm.name])
				myElement.onblur= doFocus;
			if(!myElement.doOnfocus)
			{
				myElement.doOnfocus=myElement.onfocus;
				myElement.doOnclick=myElement.onclick;
				myElement.doOnmouseup=myElement.onmouseup;
			}
		}
		if(!thisOnly)
		{
			initPart(myForm,false,'default_elements');
			initPart(myForm,false,'help_elements');
			initPart(myForm,false,'required_elements');
		}
		if(!initDone[myForm.name])
		{
			for(i5=0;i5<myForm.elements.length-1;i5++)
			{
				myForm.elements[i5].next=myForm.elements[i5+1];
				myForm.elements[i5+1].last=myForm.elements[i5];
				myElement=myForm.elements[i5];
			}
			if(!indexOfSubmit)
				indexOfSubmit=myForm.length-1;
			indexArray[myForm.name]['first']=0;
			indexArray[myForm.name]['last']=indexOfSubmit;
			if(window.initLayers && document.all)
				initLayers();
			initDone[myForm.name]=true;
		}
	allFields=false;
	}
}
			
function initPart(myForm,initString,fieldName)
{
	var myForm,initString,fieldName;
	if(fieldName)
	{
		if(fieldName=="all_elements")
		{
			initForm(myForm.name,initString,fieldName);
			doBreak=true;
		}
	}
	if(myForm && !document.doBreak)
	{
		if(myForm.elements[fieldName])
		{
			if(myForm.elements[fieldName].value=='allElements' && fieldName=='help_elements')
			{
				newHelp="";
				allHelp=myForm.elements['all_elements'].value.split(",");
				for(i6=0;i6<allHelp.length;i6++)
				{
					newHelp+=allHelp[i6].split(":")[0]+",";
				}
				myForm.elements['help_elements'].value=newHelp;
			}
			if(!initString && myForm.elements[fieldName].value!="")
				initString = myForm.elements[fieldName].value.split(",");
			if(typeof initString == "string")
				initString=initString.split(",");
			if(initString.length>0)
			{
				for(i7=0;i7<initString.length;i7++)
				{
					if(initString[i7])
					{
						parts= initString[i7].split(":");
						if(fieldName=="default_elements")
						{
							if(myForm.elements[parts[0]])
							{
								if(parts[2]=='radio')
									myForm.elements[parts[0]][parts[1]].checked=true;
								else
								{
									myElement =myForm.elements[parts[0]];
									if (myElement.type=='select-one')
									{
										myElement.selectedIndex=parts[1];
										myElement.defaultSelected=parts[1];
									}
									if (myElement.type=='checkbox')
									{
										myElement.checked=true;
										myElement.defaultChecked=true;
									}
									if (myElement.type=='text' || parts[0]=='textarea' || parts[0]=='password')
									{
										myElement.value=parts[1];
										myElement.defaultValue=parts[1];
									}
								}
							}
						}	
						else if(fieldName!="all_elements")
						{
							if(myForm.elements[initString[i7].split(":")[0]])
							{
								if(indexArray[myForm.name][initString[i7].split(":")[0]])
									elementName=indexArray[myForm.name][initString[i7].split(":")[0]];
								else
									elementName=initString[i7];
								myElement=myForm.elements[elementName];
								if(fieldName=="required_elements")
									myElement.required = true;
								else if(fieldName=="help_elements")
									myElement.helpWanted = true;
								if(doCheck && myElement.functionName)
								{
									eval("check="+myElement.functionName+"(myElement);");
									if (!check && (myElement.type=='text' || myElement.type == 'select-one' || myElement.type=='textarea' || myElement.type=='password')&& myElement.required)
										changeClass(myElement,'formempty');
									else if(!check && (myElement.type=='text' || myElement.type=='textarea' || myElement.type=='password')&& myElement.helpWanted && !myElement.required && myElement.value!="")
										changeClass(myElement,'formempty');
									else
										changeClass(myElement,'formfull');
								}
							}
						}
					}
				}
			}
		}
	}
}
		
function doBlurField(myElement,deleteValue)
{
	if(!myElement)
		myElement=this;
	myElement.blur();
	if(deleteValue)
		window.setTimeout('deleteValue("'+myElement.form.name+'","'+myElement.name+'");',100);
}

function doFocus(myElement,hideLayer)
{

	if(this.type=='text' || this.type=='select-one' || this.type=='textarea' || this.type=='password')
	{
		if(this.required || this.helpWanted)
		{
			if(this.functionName)
			{
				eval("check="+this.functionName+"(this);");
				if (!check && (this.required || this.helpWanted))
					changeClass(this,'formactive');
				else
					changeClass(this,'formfull');
				if(!hideLayer && help)
					showHelpLayer(this);
			}
		}
		else if(!hideLayer)
			changeClass(this,'formactive');
		else 
			changeClass(this,'formfull');
	}
	else if(!(this.type=='hidden' || this.type=='radio' || this.type=='checkbox')&& myElement)
	{
		if(myElement.type=='text' || myElement.type=='select-one' || myElement.type=='textarea' || myElement.type=='password')
		{
			if(myElement.required || myElement.helpWanted)
			{
				if(help && myElement.functionName)
				{
					eval("check="+myElement.functionName+"(myElement);");
					if (!check && (myElement.required || (myElement.helpWanted && (myElement.type=='text' || myElement.type=='textarea' || myElement.type=='password')&& myElement.value!='')))
					{
						if(!hideLayer)	
							changeClass(myElement,'formactive');
						else
							changeClass(myElement,'formempty');
					}
					else
						changeClass(myElement,'formfull');
					if(!hideLayer)
						showHelpLayer(myElement);
				}
			}
			else if(!hideLayer)
				changeClass(myElement,'formactive');
			else 
				changeClass(myElement,'formfull');
		}
	}
	
}
	
function doBlur()
{
	if(this.required || this.helpWanted)
	{
		if (showIsComplete)
			hideLayer(completeLayerName);
		eval("check="+this.functionName+"(this);");
		if (!check && (this.required || (this.helpWanted && (this.type=='text' || this.type=='textarea' || this.type=='password')&& this.value!='')))
			changeClass(this,'formempty');
		else
			changeClass(this,'formfull');	
		if(help && !check)		
			hideLayer(helpLayerName);
		if(showIsOptional && !this.required)		
			hideLayer(optionalLayerName);
	}
	else
		changeClass(this,'formfull');
}

function checkForm(myForm)
{
	for(i8=0; i8<myForm.length; i8++)
	{
		myElement=myForm.elements[i8];
		if(myElement.required || (myElement.helpWanted)&&((myElement.type=='text' || myElement.type=='textarea' || myElement.type=='password')&& myElement.value!=''))
		{
			eval("check="+myElement.functionName+"(myElement);");
			if (!check)
			{
				error = errormsg.replace(/%name%/g,myElement.fieldName);
				alert(error);
				focusIt(myElement)
				return false;
			}
		}
	}
	if(myForm.elements['checkBoxGroup'])
	{
		groups=myForm.elements['checkBoxGroup'].value.split(",");
		for(i9=0; i9<groups.length; i9++)
		{
			numberOfChecked=0;
			for(i10=indexArray[myForm.name][groups[i9].split(":")[1]];i10<indexArray[myForm.name][groups[i9].split(":")[2]];i10++)
			{
				if(myForm.elements[i10].type=='checkbox' && myForm.elements[i10].checked)
					numberOfChecked++;
			}
			if(numberOfChecked==0)
			{
				alert(textArr['checkBoxGroup'].replace(/%name%/,groups[i9].split(":")[0]));
				return false;
			}
		}
	}
	if(myForm.elements["all_elements"])
		myForm.elements["all_elements"].value="";
	if(myForm.elements["required_elements"])
		myForm.elements["required_elements"].value="";
	if(myForm.elements["help_elements"])
		myForm.elements["help_elements"].value="";
	if(myForm.elements["default_elements"])
		myForm.elements["default_elements"].value="";
	if(myForm.elements["checkBoxGroup"])
		myForm.elements["checkBoxGroup"].value="";
	return true;
}

function focusIt(myElement)
{
	if(myElement.type == 'text' || myElement.type == 'select-one' || myElement.type == 'textarea' || myElement.type == 'password')
		myElement.focus();
	else
	{
		thelocation=window.location.href;
		if(thelocation.indexOf("#"))
		{
			thelocation=thelocation.split("#");
			thelocation=thelocation[0];
		}
		newlocation=thelocation+'#'+parts[0]+'_a';
		location.replace(newlocation);
	}
}

function changeClass(myElement,className)
{
	if(document.getElementById)
		myElement.className=className;
}

