// The next lines are not actually used but may be useful later if isLetter is updated
var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz"
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

var whitespace = " \t\n\r";
var decimalPointDelimiter = "."

var defaultEmptyOK = false

function makeArray(n) {
   for (var i = 1; i <= n; i++) {
      this[i] = 0
   } 
   return this
}

var daysInMonth = makeArray(12);
daysInMonth[1] = 31;
daysInMonth[2] = 29; 
daysInMonth[3] = 31;
daysInMonth[4] = 30;
daysInMonth[5] = 31;
daysInMonth[6] = 30;
daysInMonth[7] = 31;
daysInMonth[8] = 31;
daysInMonth[9] = 30;
daysInMonth[10] = 31;
daysInMonth[11] = 30;
daysInMonth[12] = 31;

function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}

function isWhitespace (s)
{   var i;
    if (isEmpty(s)) return true;
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (whitespace.indexOf(c) == -1) return false;
    }
    return true;
}

function stripCharsInBag (s, bag)
{   var i;
    var returnString = "";

    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }

    return returnString;
}

function stripCharsNotInBag (s, bag)
{   var i;
    var returnString = "";
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (bag.indexOf(c) != -1) returnString += c;
    }
    return returnString;
}

function stripWhitespace (s)
{   return stripCharsInBag (s, whitespace)
}

function stripInitialWhitespace (s)
{   var i = 0;
    while ((i < s.length) && charInString (s.charAt(i), whitespace))
       i++;
    return s.substring (i, s.length);
}

function isLetter (c)
{   return ( ((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")) )
}

function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}

function isLetterOrDigit (c)
{   return (isLetter(c) || isDigit(c))
}

function isInteger (s)
{   var i;
    if (isEmpty(s)) 
       if (isInteger.arguments.length == 1) return defaultEmptyOK;
       else return (isInteger.arguments[1] == true);
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (!isDigit(c)) return false;
    }
    return true;
}

function isAlphabetic (s)
{   var i;
    if (isEmpty(s)) 
       if (isAlphabetic.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphabetic.arguments[1] == true);
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (!isLetter(c))
        return false;
    }
    return true;
}

function isAlphanumeric (s)
{   var i;

    if (isEmpty(s)) 
       if (isAlphanumeric.arguments.length == 1) return defaultEmptyOK;
       else return (isAlphanumeric.arguments[1] == true);
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (! (isLetter(c) || isDigit(c) ) )
        return false;
    }
    return true;
}


//schaut ob sText eine Zahl ist
function isNumeric(sText)
{
   var ValidChars = "-0123456789,";
   var IsNumber=true;
   var Char;

   for (i = 0; i < sText.length && IsNumber == true; i++) 
      { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
         {
         IsNumber = false;
         }
      }
   return IsNumber;
}

function isEmail (s)
{   if (isEmpty(s)) 
       if (isEmail.arguments.length == 1) return defaultEmptyOK;
       else return (isEmail.arguments[1] == true);
    if (isWhitespace(s)) return false;
    var i = 1;
    var sLength = s.length;
    while ((i < sLength) && (s.charAt(i) != "@"))
    { i++
    }
    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;
    while ((i < sLength) && (s.charAt(i) != "."))
    { i++
    }
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}

function isYear (s)
{   if (isEmpty(s)) 
       if (isYear.arguments.length == 1) return defaultEmptyOK;
       else return (isYear.arguments[1] == true);
    return ((s.length == 2) || (s.length == 4));
}

function isIntegerInRange (s, a, b)
{   if (isEmpty(s)) 
       if (isIntegerInRange.arguments.length == 1) return defaultEmptyOK;
       else return (isIntegerInRange.arguments[1] == true);
    if (!isInteger(s, false)) return false;
    var num = parseInt(s, 10); 
    return ((num >= a) && (num <= b));
}

function isMonth (s)
{   if (isEmpty(s)) 
       if (isMonth.arguments.length == 1) return defaultEmptyOK;
       else  	 return (isMonth.arguments[1] == true);
    return isIntegerInRange (s, 1, 12);
}

function isDay (s)
{   if (isEmpty(s)) 
       if (isDay.arguments.length == 1) return defaultEmptyOK;
       else return (isDay.arguments[1] == true);   
    return isIntegerInRange (s, 1, 31);
}
function daysInFebruary (year)
{   return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
}

function isDate (year, month, day)
{ 
	//alert(year + month + day);
    if (! (isYear(year, false) && isMonth(month, false) && isDay(day, false))) return false;
    var intYear = parseInt(year);
    var intMonth = parseInt(month);
    var intDay = parseInt(day);
    if (intDay > daysInMonth[intMonth]) return false; 
    if ((intMonth == 2) && (intDay > daysInFebruary(intYear))) return false;
    return true;
}

function getRadioButtonValue (radio)
{   for (var i = 0; i < radio.length; i++)
    {   if (radio[i].checked) { break }
    }
    if ( i == radio.length )
		return 0;
    return radio[i].value
}

function isPhoneNum(str) {
otherchars="+-/ " + digits
if (isWhitespace(str)) return false;
if (str.length<5) { return false }
  for (j=0; j<str.length; j++) {
      if (otherchars.indexOf(str.charAt(j)) ==-1){ return false}
    }
  return true;
}


function SubmitDetailForm(cmd, checkFnkt)
{
	var formnr = 0;
	if (checkFnkt == true)
	{
		if (cmd == 'SAVECLOSE') document.forms[formnr].IGNORE_CMD.value = 'SAVECLOSE';
		document.forms[formnr].submit();
		return true;
	}
	else
		return false;
}

function isTextFieldEmpty(fname)
{
	var formnr = 0;
	if (isEmpty(document.forms[formnr].elements[fname].value))
	{
		alert(notEmpty);
		document.forms[formnr].elements[fname].focus();
		return true;
	}
	return false;
}

function isTextFieldValidEmail(fname)
{
	var formnr = 0;
	if (!isEmail(document.forms[formnr].elements[fname].value))
	{
		alert(invalidEMail);
		document.forms[formnr].elements[fname].focus();
		return true;
	}
	return false;
}

function isCheckedValidObject(checkboxname, checkboxnr, objectname)
{
	var formnr = 0;
	if (document.forms[formnr].elements[checkboxname][checkboxnr].checked && document.forms[formnr].elements[objectname].value == 0)
	{
		alert(selErr);
		document.forms[formnr].elements[objectname].focus();
		return false;
	}
	return true;
}

function locateObject(n, d) {
  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=locateObject(n,d.layers[i].document); return x;
}

function checkURL(objURL){
		strUpperURL = objURL.value.toUpperCase()
		if (strUpperURL.substring(0,4) == "WWW."){
			objURL.value = "http://" + objURL.value
		}
	}
	
function locateObject(n, d) {
  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=locateObject(n,d.layers[i].document); return x;
}

function checkURL(objURL){
		strUpperURL = objURL.value.toUpperCase()
		if (strUpperURL.substring(0,4) == "WWW."){
			objURL.value = "http://" + objURL.value
		}
	}
	
	

function check_date(field)
{
	var checkstr = "0123456789";
	var DateField = field;
	var Datevalue = "";
	var DateTemp = "";
	var seperator = ".";
	var day;
	var month;
	var year;
	var leap = 0;
	var err = 0;
	var i;
   	err = 0;
   	DateValue = field.value
   
	/* Delete all chars except 0..9 */
   	for (i = 0; i < DateValue.length; i++) 
	{	if (checkstr.indexOf(DateValue.substr(i,1)) >= 0) 
		{	DateTemp = DateTemp + DateValue.substr(i,1);
		}
	}

	DateValue = DateTemp;

	/* Always change date to 8 digits - string*/
	/* if year is entered as 2-digit / always assume 20xx */
	if (DateValue.length == 6) 
	{	DateValue = DateValue.substr(0,4) + '20' + DateValue.substr(4,2); 
	}
   	
	if (DateValue.length != 8) 
	{	err = 19;
	}
   
	/* year is wrong if year = 0000 */
   	year = DateValue.substr(4,4);
   	if (year == 0) 
	{	err = 20;
   	}
   	
	/* Validation of month*/
   	month = DateValue.substr(2,2);
   	if ((month < 1) || (month > 12)) 
	{	err = 21;
   	}
   
	/* Validation of day*/
   	day = DateValue.substr(0,2);
   	if (day < 1) 
	{	err = 22;
	}
   
	/* Validation leap-year / february / day */
   	if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) 
	{	leap = 1;
	}
   
	if ((month == 2) && (leap == 1) && (day > 29)) 
	{	err = 23;
	}
	
	if ((month == 2) && (leap != 1) && (day > 28)) 
	{      err = 24;
   	}
   	
	/* Validation of other months */
   	if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) 
	{	err = 25;
   	}

	if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) 
	{	err = 26;
	}
   
	/* if 00 ist entered, no error, deleting the entry */
   	if ((day == 0) && (month == 0) && (year == 00)) 
	{
      		err = 0; day = ""; month = ""; year = ""; seperator = "";
   	}
   
	/* if no error, write the completed date to Input-Field (e.g. 13.12.2001) */
   	if (err == 0) 
	{
      		DateField.value = day + seperator + month + seperator + year;
		return true;
   	}
      	/* Error-message if err != 0 */
   	else 
   	{   return false
   	}
}

function stripInitialZero (s)
{   var i = 0;
    while ((i < s.length) && s.charAt(i) == "0")
       i++;
    return s.substring (i, s.length);
}

function isTextDate( sDate ){
	arrDate = sDate.split(".")
	if (arrDate.length != 3) return false;
	return (isDate(arrDate[2], arrDate[1], arrDate[0]));
	//DS; stripInitialZero = Pauls Variante -> das Problem war nämlich dass bei der Javascript-Funktion parseInt zahlen über 7 nicht mit führenden Nullen interpretiert werden können - 
	//diese werden in Okatalzahlen interpretiert => Lösung wie Paul oder parseInt(x, 10) erzwingt man dass der Wert als Dezimalzahl interpretiert wird.
	//return (isDate(stripInitialZero(arrDate[2]), stripInitialZero(arrDate[1]), stripInitialZero(arrDate[0])));
}

function daysDiff(D1, D2) { // Date Objects, with similar times
		arrDate = D1.split(".")
		date1 = new Date();date1.setHours(0,0,0,0) ; date1.setFullYear(arrDate[2], arrDate[1], arrDate[0])
		arrDate = D2.split(".")
		date2 = new Date();date2.setHours(0,0,0,0) ; date2.setFullYear(arrDate[2], arrDate[1], arrDate[0])
		return Math.round((date1-date2)/864e5)
	}
