//########################################################################################################################
// esc.Form 1.0.1
// Copyright Escapenet
// created by BG 2009
//########################################################################################################################


//########################################################################################################################
// Form Validator
//########################################################################################################################

//Ermittelt alle Form Elemente in einem Form
function getFormElements(FormID)
{
  var elString = new String();
	
  //Ein Array der die Radiobuttons Namen speichert damit diese nur einmal geprüft werden
  var checkedgroups = '';
	
  elString += '&Form=' + FormID; 
 	
  //Jedes Element der Form durchgehen und Namen und Value merken
  for (var i=0; i < document.forms[FormID].elements.length; ++i)
  {
    //Das Element speichern
    var element = document.forms[FormID].elements[i];
	
    switch (element.type)
    {   
      case "text":
	  case "file":
      case "textarea":
      case "password":
      case "hidden":
        elString += '&' + element.id;
        elString += '=' + encodeURIComponent(element.value);
        break;
		  
      case "checkbox":
        elString += '&' + element.name;
        if (element.checked == true)
          elString += '=' + encodeURIComponent(element.value);
        else
          elString += '=false';	
        break;
		   
      case "radio":
        var group = document.forms[FormID].elements[element.name];
			
        if (checkedgroups.indexOf("[" + element.name + "]") > -1)
          continue;
        else
        {
          checkedgroups += "[" + element.name + "]";
			
          for (var j=0; j<group.length; j++)
          {
            if (group[j].checked)
            {
              elString += '&' + element.name;
              elString += '=' + encodeURIComponent(group[j].value);
            }
          }
        }
        break;
			
      case "select-one":
      case "select-multiple":
        elString += '&' + element.id;
        var selectValues = ''
        for (var j=0; j < element.options.length; j++)
        {
          var item = element.options[j];
          if (item.selected && item.value != "")
          {
            if (selectValues != '')
			{
              selectValues += ',';
			}
				
            selectValues += encodeURIComponent(item.value);
          }
        }
      elString += '=' + selectValues;
      break;				
    }
  }	
  return elString;
}


//Validierung der Eingabefelder (welche das validiert werden müssen steht im "hdnRequiredFields")
function submitForm(FormID,useFunktionToRun,site,div)
{
  //Submit Button deaktivieren um mehrfaches Abschicken zu verhindern
  if (document.getElementById('btnSubmit_' + FormID))
    document.getElementById('btnSubmit_' + FormID).disabled = true;
  else if (document.getElementById('btnSubmit'))
    document.getElementById('btnSubmit').disabled = true;
  
  var valStatus = true;
  var reqFields = 'NONE'
  
  //Erforderliche Felder überprüfen
  if (document.getElementById('hdnRequiredFields_' + FormID))
    reqFields = document.getElementById('hdnRequiredFields_' + FormID).value;
  else if (document.getElementById('hdnRequiredFields'))
    reqFields = document.getElementById('hdnRequiredFields').value;
    
  //Überprüfung der erforderlichen Felder durchführen sofern angegeben
  if (reqFields != 'NONE')
  {
	var valField = reqFields.split(",");
	var i = 0;
		
	while (i < valField.length)
	{
	  if (document.getElementById(valField[i]).value == '')
	  {
		valStatus = false;
		
		//Das Element markieren
		document.getElementById(valField[i]).className = 'element-markiert';
		
		//Wenn ein Label für das Element vorhanden ist dann Dieses markieren
		if (document.getElementById('lbl' + valField[i]))
		  document.getElementById('lbl' + valField[i]).className = 'text-rot';
	  }
	  else
	  {	
		//Markierung des Elements entfernen
		document.getElementById(valField[i]).className = '';
		
		if (document.getElementById('lbl' + valField[i]))
		  document.getElementById('lbl' + valField[i]).className = '';
	  }
	  i += 1;
	}
  }
  
  //Sofern der Validierungs-Status OK ist weitermachen
  if (valStatus == true)
  {
	//Wenn keine individuelle Funktion mitgegeben wurde normaler Submit durchführen
	if (useFunktionToRun == '')
	{
	  document.forms[FormID].submit();
	}
	else
	  eval(useFunktionToRun(FormID,site,div));
  }
  else
  {
	//Bei der Validierung sind Fehler aufgetreten, Submit Button wieder aktivieren
	if (document.getElementById('btnSubmit_' + FormID))
	  document.getElementById('btnSubmit_' + FormID).disabled = false;
	else if (document.getElementById('btnSubmit'))
	  document.getElementById('btnSubmit').disabled = false;

	return false;
  }
}


//Markieren der erforderlichen Felder mit einem * Zeichen im Label
function markRequiredFields(FormID)
{
  if (document.getElementById('hdnRequiredFields_' + FormID))
    var reqFields = document.getElementById('hdnRequiredFields_' + FormID).value;
  else if (document.getElementById('hdnRequiredFields'))
    var reqFields = document.getElementById('hdnRequiredFields').value;

  if (reqFields != 'NONE')
  {
	var valField = reqFields.split(",");
	for (var i=0; i < valField.length; i++)
	{
	  if (document.getElementById('lbl' + valField[i]))
		document.getElementById('lbl' + valField[i]).innerHTML = '* ' + document.getElementById('lbl' + valField[i]).innerHTML;
	}
  }
}


//Markieren der Felder die einen Fehler aufweisen
function markErrorFields(errorFields)
{
  if (errorFields != '')
  {
    var valField = errorFields.split(",");
	for (var i=0; i < valField.length; i++)
    {
	  document.getElementById(valField[i]).className = 'element-markiert';
	  
	  if (document.getElementById('lbl' + valField[i]))
        document.getElementById('lbl' + valField[i]).className = 'text-rot';
    }
  }
}


//Formular Felder automatisch ausfüllen/selektieren
function autoFillForm(formIDs,formValues)
{
  var arrFormIDs = formIDs.split('|');
  var arrFormValues = formValues.split('|');
  
  //Durch jedes Element durchgehen
  for (var i=0; i < arrFormIDs.length; ++i)
  {
    //Element Typ ermitteln
    var element = document.getElementsByName(arrFormIDs[i])[0];
	
	//Je nach Element Typ anders verfahren
    switch (element.type)
    {   
      case "text":
	  case "file":
      case "textarea":
      case "password":
      case "hidden":
        element.value = arrFormValues[i];
        break;
		  
      case "checkbox":
	  case "radio":
	    var anzahlElemente = document.getElementsByName(arrFormIDs[i]).length;
		for (var j=0; j<anzahlElemente; ++j) 
		{
		  if (document.getElementsByName(arrFormIDs[i])[j].value == arrFormValues[i])
		  {
		    document.getElementsByName(arrFormIDs[i])[j].checked = true;
			break;
		  }
		}
        break;
			
      case "select-one":
      case "select-multiple":
		var arrSelectValues = arrFormValues[i].split(', ');
		var coll = document.getElementById(arrFormIDs[i]);
		for (j=0; j<arrSelectValues.length; j++)
		{
		  if(coll.length > 0)
		  {
			for (k=0; k<coll.options.length; k++)
			{
			  if(coll.options[k].value == arrSelectValues[j])
				coll.options[k].selected = true;
			}
		  }
		}
        break;	
	}
  }	
}

//Ermittelt den Dateinamen der in einem Input type="file" ausgewählt wurde. 
function getFileName(fieldID)
{
  var filePath = document.getElementById(fieldID).value;
  var fileName = filePath.split('\\');
  return fileName[(fileName.length)-1];
}

//Link auf Korrektheit prüfen
function checkLinkSyntax(elementID)
{
  var htmlElement = document.getElementById(elementID);
  if (htmlElement.value != '')
  {
	if (htmlElement.value.indexOf('http') == -1)
	  htmlElement.value = 'http://' + htmlElement.value;
  }
}




//########################################################################################################################
// Datum + Zeit Überprüfung
//########################################################################################################################

//Prüfen auf gültigen Monat
function checkMonatValue(elementID,monat)
{
  if (monat < 1)
    document.getElementById(elementID).value = 1;

  if (monat > 12)
    document.getElementById(elementID).value = 12;
}

//Prüfung auf gültiges Jahr
function checkYearValue(elementID,jahr)
{
  if (jahr < 1900)
    document.getElementById(elementID).value = 1900;

  if (jahr > 2099)
    document.getElementById(elementID).value = 2099;
}

//Prüfen auf gültige Zeit
function checkZeitValue(elementID,datumzeit)
{
  var arrDatumzeit = datumzeit.split(":");

  if (arrDatumzeit[0] < 0 || arrDatumzeit[0] > 23)
    document.getElementById(elementID).value = '12:00';

  if (arrDatumzeit[1] < 0 || arrDatumzeit[1] > 59)
    document.getElementById(elementID).value = '12:00';
}



//########################################################################################################################
// Radiobutton Funktionen
//########################################################################################################################

//Den Wert des selektierten Radiobuttons ermitteln
function getRadiobuttonValue(radiobuttonGruppenID)
{
  var radios = document.getElementsByName(radiobuttonGruppenID);
  if(radios.length > 0)
  {
    for (i=0; i<radios.length; i++)
    {
      if(radios[i].checked == true)
      {
        return radios[i].value;
        break;
      }
    }
  }
}

//Den Radiobutton mit dem richtigen Wert selektieren
function selectRadiobutton(radiobuttonGruppenID,x)
{
  var radios = document.getElementsByName(radiobuttonGruppenID);
  if(radios.length > 0)
  {
    for (i=0; i<radios.length; i++)
    {
      if(radios[i].value == x)
      {
        radios[i].checked = true;
        break;
      }
    }
  }
}



//########################################################################################################################
// Select Funktionen
//########################################################################################################################

//Bestimmten Wert suchen und selektieren
function selectOption(ddl,x)
{
  var coll = document.getElementById(ddl)
  if(coll.length > 0)
  {
    for (i=0; i < coll.options.length; i++)
    {
      if(coll.options[i].value == x)
      {
        coll.options[i].selected = true;
        break;
      }
    }
  }
}

//Wert hinzufügen
function addOption(ddl,x,y)
{
  var coll = document.getElementById(ddl)
  coll.options[coll.options.length] = new Option(x,y);
}

//Eintrag mit einem bestimmten Wert entfernen
function removeOption(ddl,x)
{
  var coll = document.getElementById(ddl)
  if(coll.length > 0)
  {
    for (i=0; i < coll.options.length; i++)
    {
      if(coll.options[i].value == x)
      {
        coll.remove[i];
        break;
      }
    }
  }
}

//Select Einträge sortieren
function sortOptions(ddl)
{
  var coll = document.getElementById(ddl)
  var x = coll.length;
  if(x > 0)
  {
    //Durch alle Einträge durchgehen
    var arrCombobox = new Array(x);
    for (i=0; i<x; i++)
    {
      //Wert und Name in Array speichern
      arrCombobox[i] = new Array(1);
      arrCombobox[i][0] = coll[i].text;
      arrCombobox[i][1] = coll[i].value;
    }
  }

  //Alle Einträge entfernen
  coll.length = 0;
   
  //Sortieren
  arrCombobox.sort();
 
  //Sortierte Werte wieder in das Select einfügen
  if(arrCombobox.length > 0)
  {
    for (i=0; i < arrCombobox.length; i++)
      addOption(ddl,arrCombobox[i][0],arrCombobox[i][1]);
  }  
}



//########################################################################################################################
// Email Funktionen
//########################################################################################################################
function strReverse(reverseString)
{
  return reverseString.split("").reverse().join("");
}

function mailto(emailadress)
{
  location.href = 'mailto:' + strReverse(emailadress);
}
