var arrEmptyFields = [];
var arrErrorMessage = [];
var returnOnly = false; // true fuer Notesvalidation

function validateForm(form)
{
	fcountcbs(form); //counts checkboxes
	// If any fields are marked red, unmark them
	if(arrEmptyFields.length)
	{
		swapTitleColor();
		arrEmptyFields.length = 0;
	}

	// validate Checkbox-configuration
	fcountcbs(form);
	if( (fgetcb("account_profil")!=0) && (fgetcb("Account_Sprache_Mitteilung")==0) )
	{
		arrEmptyFields[arrEmptyFields.length] = arrEmptyFields[arrEmptyFields.length] = "Account_Sprache_Mitteilung";
	}

	for(var i=0; i<form.elements.length; i++)
	{
		if(form.elements[i].getAttribute("sort"))
		{
			var fieldValue = form.elements[i].value;

			// Check type of field and validate
			switch(form.elements[i].getAttribute("sort"))
			{
				case "text":
					if((!fieldValue) || (fieldValue == "(empty)"))
					{
						if(form.elements[i].name == "day" || form.elements[i].name == "month" || form.elements[i].name == "year")
						{
							arrEmptyFields[arrEmptyFields.length] = "date";
						}
						else
							arrEmptyFields[arrEmptyFields.length] = form.elements[i].name;
					}
					
					break;
				case "radiobutton2Options":
					if ((form.elements[i].checked == false) && (form.elements[i+1].checked == false))
					{
						arrEmptyFields[arrEmptyFields.length] = form.elements[i].name;
					}
					break;	
				case "date":
					if(!fieldValue)
					{
						arrEmptyFields[arrEmptyFields.length] = form.elements[i].name;
					}
					else if(!fdatvalid(fieldValue))
					{
						arrEmptyFields[arrEmptyFields.length] = form.elements[i].name;
					}
					break;
				case "plz":
					if(!fieldValue)
					{
						arrEmptyFields[arrEmptyFields.length] = form.elements[i].name;
					}
					else if(!fplzvalid(fieldValue))
					{
						arrEmptyFields[arrEmptyFields.length] = form.elements[i].name;
					}
					break;
				case "checkbox":
					// If checkbox not checked
					if(!form.elements[i].checked)
					{
						arrEmptyFields[arrEmptyFields.length] = form.elements[i].name;
					}
					break;
				case "user":
					var userError = document.getElementById("userError");
					var userCharError = document.getElementById("userCharError");
					userError.style.display = "none";
					userCharError.style.display = "none";
					if(!fieldValue)
					{
						arrEmptyFields[arrEmptyFields.length] = form.elements[i].name;
					}
					else if(fieldValue.length > 16)
					{
						userError.style.display = "";
						arrEmptyFields[arrEmptyFields.length] = arrErrorMessage[arrErrorMessage.length] = form.elements[i].name;
					}
					else if(fieldValue.search(/^\w[A-Za-z0-9_.-]+$/) == -1)
					{
						userCharError.style.display = "";
						arrEmptyFields[arrEmptyFields.length] = arrErrorMessage[arrErrorMessage.length] = form.elements[i].name;
					}
					break;
				case "password":
					var passwordError = document.getElementById("passwordError");
					var confirmpasswordError = document.getElementById("confirmpasswordError");		
					var confirmField = form.elements[i + 1];

					// If empty
					if(!fieldValue)
					{
						arrEmptyFields[arrEmptyFields.length] = form.elements[i].name;
					}
					else if(fieldValue.length < 6)
					{
						// show message saying at least 6 chars
						passwordError.style.display = "";
						confirmpasswordError.style.display = "none";
						arrEmptyFields[arrEmptyFields.length] = arrErrorMessage[arrErrorMessage.length] = form.elements[i].name;
					}
					else
					{
						passwordError.style.display = "none";
						// If confirmation password field exists
						if(confirmField.type == "password")
						{
							// If password is not equal to confirm field
							if(fieldValue != confirmField.value)
							{
								// show message about no match
								arrEmptyFields[arrEmptyFields.length] = arrErrorMessage[arrErrorMessage.length] = confirmField.name;
								confirmpasswordError.style.display = "";
								passwordError.style.display = "none";
							}
							else
							{
								confirmpasswordError.style.display = "none";
							}
						}
					}

					break;
				case "email":
					// If empty
					if(!fieldValue)
					{
						// Only if required
						if(form.elements[i].getAttribute("required") != "no")
							arrEmptyFields[arrEmptyFields.length] = form.elements[i].name;			
					}
					else
					{
						var regExp = /^[^@ ]+@[^@ ]+\.[a-zA-Z]+$/;
						var emailError = document.getElementById("emailError");
		
						// Activate/deactivate error message
						if(fieldValue.search(regExp) == -1)
						{
							arrEmptyFields[arrEmptyFields.length] = arrErrorMessage[arrErrorMessage.length] = form.elements[i].name;
							emailError.style.display = "";
						}
						else
						{
							emailError.style.display = "none";
						}
					}
					
					break;
				default:
					// Debug 
					alert("Unknown sort type has been set on form element -" + form.elements[i].getAttribute("sort") + "- please correct.");
			}
		}
	}

	// If any required field is empty or incorrect
	if(arrEmptyFields.length > 0)
	{
		if(document.getElementById("instructions"))
		{
			document.getElementById("instructions").style.display = "none";
			document.getElementById("errorMessage").style.display = "";
		}

		// Mark all empty fields
		swapTitleColor();
		
		// Scroll page to top to focus error message
		window.scroll(0,0);
		if (returnOnly == true) {
			return false;
		}
	}
	else
	{
		if (returnOnly == true) {
			return true;
		} else {
			form.submit();
		}
	}
}

// Highlight/dehighlight field titles
function swapTitleColor()
{
	for(var i=0; i<arrEmptyFields.length; i++)
	{
		var elm = document.getElementById(arrEmptyFields[i] + "Span");
		elm.className = (elm.className == "")? "error":"";
	}
}

function resetForm(form)
{
	if(arrEmptyFields.length)
	{
		swapTitleColor()
		arrEmptyFields.length = 0;
	}

	// Remove existing error messages
	if(arrErrorMessage.length)
	{
		for(var j=0; j<arrErrorMessage.length; j++)
		{
			document.getElementById(arrErrorMessage[j] + "Error").style.display = "none";
		}
		
		arrErrorMessage.length = 0;
	}	

	if(document.getElementById("instructions"))
	{
		document.getElementById("instructions").style.display = "";
		document.getElementById("errorMessage").style.display = "none";
	}
	
	form.reset();
}

function resetField(obj)
{
	if(!obj.value) obj.value = obj.defaultValue;
}





// begin checkbox counter functions

var arrCheckbox = [];
var arrChecked = [];

function fitemcb(vName) {
 // finds an item number in the array
 var vfound = -1;
 for(var i=0; i<arrCheckbox.length; i++) {
  if(arrCheckbox[i] == vName) {
   vfound = i;
  }
 }
 if(vfound == -1) {
  arrCheckbox[i] = vName;
  arrChecked[i] = 0;
  vfound = i;
 }
 return vfound;
}

function fgetcb(vName) {
 return arrChecked[fitemcb(vName)];
}

function faddcb(vName, vWert) {
 var i = fitemcb(vName);
 arrChecked[i] = arrChecked[i] + vWert;
}

function finccb(vName) {
 faddcb(vName, 1);
}

function fsetcb(vName, vWert) {
 arrChecked[fitemcb(vName)] = vWert;
}

function fresetcb() {
 for(var i=0; i<arrCheckbox.length; i++) {
  arrChecked[i] = 0;
 }
}

function falertcb(vName) {
 alert(fgetcb(vName));
}

function fcountcbs(vform)
{
 fresetcb();
 //vform = document.forms[0];
 j = 0;
 for (i=0;i<vform.elements.length;i++) {
  velem = vform.elements[i];
  if (velem.type=="checkbox") {
   if (velem.name!="") {
    if (velem.checked) {
     finccb(velem.name);
    }
   }
  } 
 }
}

// end checkbox counter functions



//4 at, 5 de
function fplzvalid(vText) {
 var vvalid = false;
 if(vText.length == 4 || vText.length == 5) {
  var vchar;
  vvalid = true;
  for(var i=0; i<vText.length; i++) {
   vchar = vText.charAt(i);
   if(!((vchar >= 0 ) && (vchar <= 9))) {
    vvalid = false;
   }
  }
 }
 return vvalid;
}


function fdatvalid(vText) {
 var vtag;
 var vmonat;
 var vjahr;
 var vvalid = false;
 if(vText.length == 10) {
  vvalid = true;
  if (vText.substr(2, 1) != "/") {
   vtag = vText.substr(0, 2);
   vmonat = vText.substr(3, 2);
   vjahr = vText.substr(6, 4);
  } else {
   vtag = vText.substr(3, 2);
   vmonat = vText.substr(0, 2);
   vjahr = vText.substr(6, 4);
  }
  if (vtag <= 0 || vtag >= 32) {
   vvalid = false;
  }
  if (vmonat <= 0 || vmonat >= 13) {
   vvalid = false;
  }
  if (vjahr <= 1800 || vjahr >= 2100) {
   vvalid = false;
  }
 }
 if (vvalid == true) {
  var vtag2;
  var vmonat2;
  var vjahr2;
  var d = new Date(vjahr, vmonat - 1, vtag);
  vtag2 = d.getDate();
  vmonat2 = d.getMonth() + 1;
  vjahr2 = d.getFullYear();
  if (!((vtag == vtag2) && (vmonat == vmonat2) && (vjahr == vjahr2))) {
   // alert(vtag2 + "." + vmonat2 + "." + vjahr2 + " != " + vtag + vmonat + vjahr);
   vvalid = false;
  }
 }
 return vvalid;
}

function checkXentricQuotes(form){
	
	if (form.isin.value.length != 12){
		document.getElementById("xentricMessage").style.display = "block";
		return false;
	}
	
	form.userDate.value = form.date.value;
	form.userTime.value = form.time.value;
	
	form.date.value = form.date.value.substring(6,10) + form.date.value.substring(3,5) + form.date.value.substring(0,2);
	form.time.value = form.time.value.substring(0,2) + form.time.value.substring(3,5) + "0000";

	form.submit();
}

