function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// v2.0 u.d. 09.11.2006
//++  Funktion prueft, ob bei Formular-Element ein Wert enthalten ist
//++   Parameter:
//++   1. div ID; 2. ID des divs, dessen class sich aendern soll; 3. error-class; 4.non-error-class
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
var buggy;

function isValueX(oN, trID, errklasse, klasse) {
buggy = false;
  var objRef = MM_findObj(oN);
  if (objRef.value=="") {
    document.getElementById(trID).className = errklasse;   
    buggy = true;
    document.getElementById("txtErrBox").style.display='block'; 
    } 
  else {
	document.getElementById(trID).className = klasse;
	document.getElementById("txtErrBox").style.display='none';}  
}


//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// v2.0 u.d. 09.11.2006
//++  Funktion prueft, ob bei Radiobutton(-Gruppe) ein Wert selektiert ist.
//++  Parameter:
//++  1. div ID; 2. ID des divs, dessen class sich aendern soll; 3. error-class; 4.non-error-class
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function isValueRadioX(oN,trID,errklasse,klasse) 
{  
	buggy = false;
	var objRef = MM_findObj(oN);  
	var i=0; leer=false; x="";
	if (objRef!=null)
	{
		if (objRef.length)
		{
			with (objRef) 
			{ 
				for (i=0;i<objRef.length;i++) 
				{
					if (objRef[i].checked) x=objRef[i].value; 
				}
				if (x=="") leer = true;
			}
			if (leer) 
			{
				document.getElementById(trID).className = errklasse;
				buggy = true;
				document.getElementById("txtErrBox").style.display='block';  
			}
			else 
			{
				document.getElementById(trID).className = klasse;
				document.getElementById("txtErrBox").style.display='none';
			}
		}
		else
		{
			if (objRef.checked)
			{
				document.getElementById(trID).className = klasse;
				document.getElementById("txtErrBox").style.display='none';
			}
			else
			{
				document.getElementById(trID).className = errklasse;
				buggy = true;
				document.getElementById("txtErrBox").style.display='block';  
			}
		}
	}
}
function isValueRadio(oN, Fehlermeldung)
{ 
  var objRef = MM_findObj(oN);
	  var i=0; leer=false; x="";
  with (objRef) { 
    for (i=0;i<objRef.length;i++) {
      if (objRef[i].checked) 
     x=objRef[i].value; } 
    if (x=="") leer = true;
  }
  if (leer) {
		alert(Fehlermeldung);
		 objRef.focus();
    return false;
  }
  else return true;	
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// v2.0 u.d. 29.01.2007
//++  Funktion prueft, ob Checkbox selektiert ist
//++  Parameter:
//++   1. div ID; 2. ID des divs, dessen class sich aendern soll; 3. error-class; 4.non-error-class
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function isCheckboxSelectX(oN,trID,errklasse,klasse) {
	buggy = false;
  var objRef = MM_findObj(oN);
  if (!objRef.checked){
	document.getElementById(trID).className = errklasse;
    buggy = true;
    document.getElementById("txtErrBox").style.display='block';  
  }
  else {
	document.getElementById(trID).className = klasse;
	document.getElementById("txtErrBox").style.display='none';
    }
	
}

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// v2.0 u.d. 30.01.2007
//++  Funktion prueft, ob als PLZ nur 5-stellige Zahlen eingegeben wurden
//++  Parameter:
//++   1. div ID; 2. ID des divs, dessen class sich aendern soll; 3. error-class; 4.non-error-class
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function isPLZX(oN,trID,errklasse,klasse)
{ 
  var objRef = MM_findObj(oN);
	if ((isNaN(objRef.value)) || objRef.value.length!=5 || objRef.value.indexOf(".")!=-1)
	{
	document.getElementById(trID).className = errklasse;
    buggy = true;
    document.getElementById("txtErrBox").style.display='block'; 
	}	
	else{	
	document.getElementById(trID).className = klasse;
	document.getElementById("txtErrBox").style.display='none';
	}
}

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// v2.0 u.d. 09.11.2006
//++  Funktion prueft, ob bei Formular-Element ein Wert gueltige Email-Adresse ist
//++  Gueltigkeit: ein @ vorhanden, keine sonderzeichen, domain als [IP] oder
//++  als String mit maximal 4 Zeichen Topleveldomain
//++  Parameter:
//++   1. div ID; 2. ID des divs, dessen class sich aendern soll; 3. error-class; 4.non-error-class
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function isEmailX(oN,trID,errklasse,klasse) 
{	
	buggy=false;
	var objRef=MM_findObj(oN);
	var email=objRef.value;
	if (email.indexOf(" ")!=-1) 
	{	
		document.getElementById(trID).className=errklasse;   
		document.getElementById("txtErrBox").style.display='block';
		buggy=true;
	}
	if (RegExp) 
	{
		var reg1=/(@.+@)|(\.\.)|(@\.)|(\.@)|(^\.)/;
		var reg2=/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
		if (!reg1.test(email) && reg2.test(email))
		{
			document.getElementById(trID).className=klasse;  
			document.getElementById("txtErrBox").style.display='none';
			return true;
		}
		else 
		{
			document.getElementById(trID).className=errklasse;  
			buggy=true;
			document.getElementById("txtErrBox").style.display='block';
		}
	}
	else 
	{
		if (email.indexOf("@")==-1) 
		{
			document.getElementById(trID).className=errklasse;  
			buggy=true;
			document.getElementById("txtErrBox").style.display='block';
		}
		else 
		{
			document.getElementById(trID).className=klasse;
			document.getElementById("txtErrBox").style.display='none';
		}
	}
}

function isEmail(oN,fehlermeldung) {	
  var objRef = MM_findObj(oN);
  var email = objRef.value;
  if (email.indexOf(" ")!=-1) {	
   alert(fehlermeldung);
	objRef.focus();
    return false;   
    }
  if (RegExp) {
    var reg1 = /(@.+@)|(\.\.)|(@\.)|(\.@)|(^\.)/;
    var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
    if (!reg1.test(email) && reg2.test(email)) return true;
    else {alert(fehlermeldung);
		 objRef.focus();
    return false; }
  }
  else {
    if (email.indexOf("@")==-1) {
   alert(fehlermeldung);
		 objRef.focus();
    return false;
     }
    else return true;	
  }
}


//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// v2.0 u.d. 09.11.2006
//++  Funktion prueft, ob Wert Numerisch ist
//++  Erlaubt: Ziffern, ein Komma oder ein Punkt
//++  Parameter:
//++  1. div ID; 2. ID des divs, dessen class sich aendern soll; 3. error-class; 4.non-error-class
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function isNumericX(oN,trID,errklasse,klasse)
{ 
	var objRef = MM_findObj(oN);
	if (isNaN(objRef.value)) 
	{
		if (objRef.value.indexOf(".")!=-1) 
		{
			var zahl = objRef.value.split(".");
		} 
		else 
		{ 
			var zahl = objRef.value.split(","); 
		}
	if (zahl.length>2)
	{ 
	document.getElementById(trID).className = errklasse;
	buggy = true;
	document.getElementById("txtErrBox").style.display='block';
		}
	else if (isNaN(zahl[0]) || isNaN(zahl[1]))
		{
	document.getElementById(trID).className = errklasse;
	buggy = true;
	document.getElementById("txtErrBox").style.display='block';
		} 
	else{
	document.getElementById(trID).className = klasse;
	document.getElementById("txtErrBox").style.display='none';}
	}
}

function countit2(oN,maxzahl)
{ 	
	var objRef = MM_findObj(oN);
	if (objRef.value.length>maxzahl) 
	{
		alert("In dieses Feld knnen Sie nur "+maxzahl+ " Zeichen eingeben.");
		objRef.value = objRef.value.substring(0, maxzahl-1);		
		objRef.focus();return false; 
	}	
}


//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// v2.0 u.dejung 29.12.2006
//++  Funktion prueft, ob in Dropdown ein gueltiger Wert selektiert ist
//++  Parameter:
//++   -oN: Dropdown-Name
//++   -trID: ID des Elements, dessen style geaendert werden soll
//++   -errklasse: error-style-classe des Elements, dessen style geaendert werden soll
//++   -klasse: normale style-classe des Elements, dessen style geaendert werden soll
//++   -Ausschluss: Wert, der nicht als gewaehlt gilt (ungueltig)
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

function isValueDropX(oN,trID,errklasse,klasse,Ausschluss){
buggy = false;
	var objRef = MM_findObj(oN);
	var i=0; leer=false; x="";
	with (objRef)	{  
	for (i=0;i<objRef.length;i++)
    		{if (objRef[i].selected) 
    		 x=objRef[i].value;} 
		if (x=="") leer = true;
         }
	  
   if (x==Ausschluss){
	document.getElementById(trID).className = errklasse;
	buggy = true;
	document.getElementById("txtErrBox").style.display='block';

   }

 
  else if (leer) {
	document.getElementById(trID).className = errklasse;
	buggy = true;
	document.getElementById("txtErrBox").style.display='block';
	}
    else {
	document.getElementById(trID).className = klasse;
	document.getElementById("txtErrBox").style.display='none';
	   }
}

//original (V. 1.0)
function isValueDrop(oN,Fehlermeldung,Ausschluss)
{  	
	var objRef = MM_findObj(oN);
	var i=0; leer=false; x="";
	with (objRef)	{  
	for (i=0;i<objRef.length;i++)
    		{if (objRef[i].selected) 
    		 x=objRef[i].value;} 
		if (x=="") leer = true;
         }
	  
   if (x==Ausschluss){
   alert(Fehlermeldung);
   objRef.focus();
   return false;}
   else return true;
 
  if (leer) {
    alert(Fehlermeldung);
	objRef.focus();
    return false;}
  else return true;
}

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++  Funktion prueft, ob Wert Numerisch ist
//++  Erlaubt: Ziffern, ein Komma oder ein Punkt
//++  Parameter:
//++   -checkWert: PrfWert
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function boolNumeric(checkWert){
  var boolNum=true;
  if (isNaN(checkWert)) {
    boolNum=false;
    if (checkWert.indexOf(".")!=-1) var zahl = checkWert.split(".");
    else var zahl = checkWert.split(",");
    if (!(zahl.length>2) && !isNaN(zahl[0]) && !isNaN(zahl[1])) boolNum=true; }
  else if (checkWert.indexOf("e")!=-1||checkWert=="") boolNum=false;
  return boolNum;
}




//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// status.: Vers0.9 | creat.: 21.09.2006 | modif.: 21.09.2006
// current owner: ja
// description: Validierung von Formularelementen
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
/*
	Nummerprfung o.k.
*/
function IsNumeric(zahl)
{
	var PNum = new String(zahl);
	var regex = /[^0-9]/;
	return !regex.test(PNum);
}
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++  Funktion prft, ob Wert aus Ziffern besteht
//++  Parameter:
//++   -checkWert: PrfWert
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function boolZiffer(checkWert){
  var boolNum=true;
  if (isNaN(checkWert)||checkWert=="") boolNum=false;
  else if (checkWert.indexOf("e")!=-1 || checkWert.indexOf(",")!=-1 || checkWert.indexOf(".")!=-1 || checkWert.indexOf("-")!=-1) boolNum=false;
  return boolNum;
}



//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++  Funktion prft, ob Wert zwischen zwei numerischen Werten liegt
//++  Parameter:
//++   -checkWert: PrfWert
//++   -min: Untergrenze, PrfWert muss grer sein
//++   -max: Obergrenze, PrfWert muss kleiner sein
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function boolRange(checkWert,min,max){
  var boolRng=true;
  if (boolNumeric(checkWert)) {
    if (checkWert<min || checkWert>max) boolRng=false; }
  else boolRng=false;
  return boolRng;
}

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++  Funktion prft, ob Wert in Formular-Element keine Sonderzeichen enthlt
//++    Sonderzeichen: ! "  $ % & / ( ) = ?   { [ ] } \ `  | > < - @ , . ; :  * + ~ \ #
//++  Parameter:
//++   -oN: Formular-Element-Name
//++   -fehlermeldung: Fehlermeldung im Alert-fenster
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function isPasswort(oN,fehlermeldung) {  
  var objRef = MM_findObj(oN);
  var psw = objRef.value;
	if((objRef.value.indexOf('!') != -1) || (objRef.value.indexOf('"') != -1)|| (objRef.value.indexOf('') != -1)|| (objRef.value.indexOf('$') != -1)|| (objRef.value.indexOf('%') != -1)|| (objRef.value.indexOf('&') != -1)|| (objRef.value.indexOf('/') != -1)|| (objRef.value.indexOf('(') != -1)|| (objRef.value.indexOf(')') != -1) || (objRef.value.indexOf('=') != -1)|| (objRef.value.indexOf('?') != -1)|| (objRef.value.indexOf('') != -1)|| (objRef.value.indexOf('') != -1) || (objRef.value.indexOf('{') != -1)|| (objRef.value.indexOf('[') != -1)|| (objRef.value.indexOf(']') != -1)|| (objRef.value.indexOf('}') != -1)|| (objRef.value.indexOf('\'') != -1) || (objRef.value.indexOf('`') != -1)|| (objRef.value.indexOf('') != -1)|| (objRef.value.indexOf('|') != -1)|| (objRef.value.indexOf('>') != -1)|| (objRef.value.indexOf('<') != -1)|| (objRef.value.indexOf('-') != -1) || (objRef.value.indexOf('@') != -1)|| (objRef.value.indexOf(',') != -1)|| (objRef.value.indexOf('.') != -1)|| (objRef.value.indexOf(';') != -1)|| (objRef.value.indexOf(':') != -1) || (objRef.value.indexOf('') != -1)|| (objRef.value.indexOf('*') != -1)|| (objRef.value.indexOf('+') != -1)|| (objRef.value.indexOf('~') != -1)|| (objRef.value.indexOf('\\') != -1)|| (objRef.value.indexOf('#') != -1) ) {
   alert(fehlermeldung);
   objRef.value="";
   objRef.focus();
   return false;
  }    
   return true;
}

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++  Funktion prft, ob Checkbox selektiert ist
//++  Parameter:
//++   -oN: Checkbox-Name
//++   -fehlermeldung: Fehlermeldung im Alert-fenster
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function isCheckboxSelect(oN,fehlermeldung) {
  var objRef = MM_findObj(oN);
  if (!objRef.checked){
    alert(fehlermeldung);
	objRef.focus();
    return false;
  }
  else return true;
}


//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++  Funktion prft, ob die Eingabe eines Feldes ber einen bestimmten
//++   steigt.
//++  Parameter:
//++   -oN: Formular-Element
//++   -fehlermeldung: Fehlermeldung im Alert-fenster
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function isFeldLaenge(oN,Fehlermeldung,laenge) {
  var objRef = MM_findObj(oN);
  if (objRef.value.length > laenge) {
    alert(Fehlermeldung);
    objRef.focus();
    return false; }
}

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++  Funktion prft, ob bei Formular-Element ein Wert eine Anzahl von Zeichen
//++    zwischen einer Minimum- und Maximum-Anzahl besitzt
//++  Parameter:
//++   -oN: Formular-Element
//++   -Fehlermeldung: Fehlermeldung im Alert-fenster
//++   -zeichenanzahlMin: Anzahl von Zeichen, die berschritten werden muss
//++   -zeichenanzahlMax: Anzahl von Zeichen, die nicht erreicht werden darf
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function isRange(oN,Fehlermeldung,zeichenanzahlMin,zeichenanzahlMax) { 	
  var objRef = MM_findObj(oN);
  if ((objRef.value.length<zeichenanzahlMin)||(objRef.value.length>zeichenanzahlMax)) {
    alert(Fehlermeldung);
    objRef.value="";
    objRef.focus();
    return false; }
}

function isRangeX(oN, trID, errklasse, klasse, zeichenanzahlMin,zeichenanzahlMax) { 	
  buggy = false;
  var objRef = MM_findObj(oN);
  if ((objRef.value.length<zeichenanzahlMin)||(objRef.value.length>zeichenanzahlMax))
  {
  	document.getElementById(trID).className = errklasse;   
    buggy = true;
    document.getElementById("txtErrBox").style.display='block'; 
  }
  else
  {
	document.getElementById(trID).className = klasse;
	document.getElementById("txtErrBox").style.display='none';
  }   
}


//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++  Funktion prft, ob bei Formular-Element ein Wert eine Anzahl von Zeichen
//++    zwischen einer Minimum- und Maximum-Anzahl besitzt und die entsprechenden 
//++    Felder zurcksetzt
//++  Parameter:
//++   -oN1: Formular-Element (immer das zu prfende Feld)
//++   -oN2: Formular-Element
//++   -Fehlermeldung: Fehlermeldung im Alert-fenster
//++   -zeichenanzahlMin: Anzahl von Zeichen, die berschritten werden muss
//++   -zeichenanzahlMax: Anzahl von Zeichen, die nicht erreicht werden darf
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function isRangeLogin(oN1,oN2,Fehlermeldung,zeichenanzahlMin,zeichenanzahlMax,oN3,FocSetz) { 	
  var objRef1 = MM_findObj(oN1);
  var objRef2 = MM_findObj(oN2);
  var objRef3 = MM_findObj(oN3);
  if ((objRef1.value.length<zeichenanzahlMin)||(objRef1.value.length>zeichenanzahlMax)) {
    alert(Fehlermeldung);
    objRef1.value="";
    objRef2.value="";
    objRef3.value="";
    /*if (oN3.indexOf("2") != true)
	{
		objRef1.focus();
	}
	else
	{*/
		a=eval("objRef"+FocSetz);
		a.focus();
	//}
    return false; }
}



//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++  Funktion prft, ob die Werte von 2 Formularelementen gleich sind
//++  Parameter:
//++   -oN1: Formular-Element1
//++   -oN2: Formular-Element2
//++   -Fehlermeldung: Fehlermeldung im Alert-fenster
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function isCompare(oN1, oN2, fehlermeldung) { 
  var objRef1 = MM_findObj(oN1);
  var objRef2 = MM_findObj(oN2);
  if (objRef1.value != objRef2.value) {
    alert(fehlermeldung);
    objRef1.value="";
    objRef2.value="";
    objRef2.focus();
    return false; }
}

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++  Funktion prft, ob Cookies aktiviert sind und schreibt das Ergebnis in
//++    ein 2 Formularelement ("yes", "no")
//++  Parameter:
//++   -oN: Formular-Element, welches den Wert erhlt
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function isCookie(oN) {
  var objRef = MM_findObj(oN);
  if(navigator.cookieEnabled == true) objRef.value = "yes";
  if(navigator.cookieEnabled == false) objRef.value = "no";
}
// Angehängt j.a.
function isNumeric(oN,Fehlermeldung)
{ 
	var objRef = MM_findObj(oN);
	// Falls sich kein eindeutiges Objekt im Formular finden ließ
	if (typeof objRef.value=='undefined') {
		if (!(typeof document.getElementById(oN).value=='undefined')) {
			objRef = document.getElementById(oN);	
		}
	}
	
	if (isNaN(objRef.value)) {
		if (objRef.value.indexOf(".")!=-1) {
			var zahl = objRef.value.split(".");
		} else { 
			var zahl = objRef.value.split(","); 
		}
		if (zahl.length>2) { 
			alert(Fehlermeldung);
			objRef.focus();return false;
		}
			
		if (isNaN(zahl[0]) || isNaN(zahl[1])) { 
			alert(Fehlermeldung);
			objRef.focus();return false;
		} 
	}
}
function isValue(oN,Fehlermeldung) {
	var objRef = MM_findObj(oN);
	// Falls sich kein eindeutiges Objekt im Formular finden ließ
	if (typeof objRef.value=='undefined') {
		if (!(typeof document.getElementById(oN).value=='undefined')) {
			objRef = document.getElementById(oN);	
		}
	}
  
	if (objRef.value=="") {
		alert(Fehlermeldung);
		objRef.focus();
		return false; 
	}
}

function isPLZ(oN, Fehlermeldung)
{ 
	var objRef = MM_findObj(oN);
	// Falls sich kein eindeutiges Objekt im Formular finden ließ
	if (typeof objRef.value=='undefined') {
		if (!(typeof document.getElementById(oN).value=='undefined')) {
			objRef = document.getElementById(oN);	
		}
	}
  
	if ((isNaN(objRef.value)) || objRef.value.length!=5 || objRef.value.indexOf(".")!=-1)
		{alert(Fehlermeldung);
		 objRef.focus();return false;}	
}

function isValidDate(pDay, pMonth, pYear)
{
		var dateString = pMonth + "/" + ((pDay.length>1)? pDay: "0" + pDay) + "/" + pYear;
   	var regExPattern = /^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/;
    return dateString.match(regExPattern);
}
