// Validate.js
// Some Routines for HTML-Form Validation


function returnSelection(radioField) {
    var selection = null;
    for (i=0; i < radioField.length; i++) {
        if (radioField[i].checked) {
           selection=radioField[i].value;
           return selection; 
        }
    }
    return selection; 
}

// Check if min. one Item is checked in a Group
function IsSomethingChecked(Field) {
	if (returnSelection(Field) == null) {
		Field[0].focus();
		return false;
	}
	return true;
}

// Check, if not the first Item is checked
function IsNotFirstSelected(Field) {
	if (Field.selectedIndex > 0) {
		return true;
	} else {
		Field.focus();
		return false;
	}
}

// Check if Field contains Value with min len
function ContainsSomething(Field, len) {
   if ((Field.type == "text") || (Field.type == "textarea") || (Field.type == "password")) {
      if (Field.value.length < len) {
		 Field.focus();
         return false;
      }
   } else {   
      if (returnSelection(Field) == null) {
         return false;
      }
   }
   return true;
}
   
// Check for valid (ie containg "@", ".", 
// and more than 6 characters) email-address in Field
function IsValidEmail(Field) {
   if (!ContainsSomething(Field)) {
      return false;
   }
   if (Field.value.indexOf("@")==-1  
	|| Field.value.indexOf(".")==-1 
    || Field.value.indexOf(" ")!=-1 
    || Field.value.length<6) {
	   Field.focus();
       return false;
   } else {
       return true;
   }
}   
  
  // Check if Field contains a valid date of the form dd/mm/yy
function IsValidDate(Field) {
   if (!ContainsSomething(Field)) {
      return false;
   }
   var indate=Field.value;
   var sdate = indate.split("/")
   var chkDate = new Date(Date.parse(indate))
   var cmpDate = (chkDate.getMonth()+1)+
                  "/"+(chkDate.getDate())+
                  "/"+(chkDate.getYear())
   var indate2 = (Math.abs(sdate[0]))+"/"+(
                  Math.abs(sdate[1]))+
                  "/"+(Math.abs(sdate[2]))
   if (indate2 != cmpDate || cmpDate == "NaN/NaN/NaN") {
	   Field.focus();
       return false
   } else {
       return true;
   }	
}

// Check if Field contains numeric data only
function IsNum(Field) {
   if (!ContainsSomething(Field)) {
      return false;
   }
   theNum = parseFloat(Field.value);
   if (Field.value != '' + theNum) {
	   Field.focus();
       return false;
   }
   return true;
}

// Check if Field contains only letters
function IsOnlyLetters(Field) {
   if (!ContainsSomething(Field)) {
      return false;
   }
   var Letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZÜÖÄ'´"
   for (i=0; i < Field.value.length; i++) {
       var CheckChar = Field.value.charAt(i);
       CheckChar = CheckChar.toUpperCase();
       if (Letters.indexOf(CheckChar) == -1) {
		  Field.focus();
          return false;
       }
    }
    return true;
}

// Check if Field contains only digits in range Min to Max
function IsInRange(Field, Min, Max) {
    if (IsNum(Field) == false) {
	   Field.focus();
       return false;
    }
	if (Field.value < Min || Max < Field.value) {
	   Field.focus();
       return false;
    }
    return true;
}

// Check if Field is not equal to strCompare
function IsNotEqual(Field, strCompare) {
    return (Field.value == strCompare);
}

// Ueberprueft auf Unworte und gibt Sie zurueck
wrongWords = new Array('abgefahren', 'abzocker', 'affe', 'angeber', 'armleuchter', 'arsch', 'asche', 'basta', 'bekifft', 'beschissen', 'besserwisser', 'bloed', 'blutsauger', 'boah', 'bug', 'ciao', 'cool', 'dumm', 'fascho', 'fick', 'floehe', 'fotze', 'fressen', 'fuck', 'furzer', 'geil', 'gier', 'gruenschnabel', 'grusel', 'hey', 'hohlkopf', 'hund', 'ignorant', 'inkompetent', 'joke', 'kack', 'knete', 'kotz', 'krass', 'kratzt', 'lesbe', 'lesbisch', 'macker', 'maeuse', 'mies', 'mist', 'mogel', 'moneten', 'muschi', 'narren', 'nasenbohrer', 'netikette', 'nichtsnutz', 'nutte', 'peng', 'penner', 'piss', 'poebeln', 'punker', 'pusher', 'quark', 'ratte', 'saufen', 'schaetzchen', 'scheiss', 'schlampe', 'schlange', 'schlaumeier', 'schmarrn', 'schwachkopf', 'schwachsinn', 'schwanz', 'schwein', 'schwindel', 'schwul', 'sex', 'stinkender', 'stirb', 'stuemper', 'suende', 'tach', 'teufel', 'tierisch', 'titten', 'tja', 'tschau', 'tunte', 'tuntig', 'uncool', 'unfug', 'unverschaemt', 'versager', 'versaut', 'versoffen', 'voegel', 'wichser', 'witz', 'wow', 'wucher', 'zappen', 'zins', 'zock');
function CheckWords(Field) {
	words = Field.value.toLowerCase();
	for (i = 0; i < wrongWords.length; i++) {
		if (words.indexOf(wrongWords[i]) > -1) {
			return wrongWords[i];
		}
	}
	return '';
}

// Ueberprueft auf gueltige Kontonummer
function IsKtoNr(Field) {
	return IsInRange(Field, 1000, 9999999999);
}

// Ueberprueft auf gueltige Bankleitzahl
function IsBLZ(Field) {
	return IsInRange(Field, 10000000, 99999999);
}

function isCreditCard(st) {
   if (st.length > 19) {
      return (false);
   }
   sum = 0; mul = 1; l = st.length;
   for (i = 0; i < l; i++) {
       digit = st.substring(l-i-1,l-i);
       tproduct = parseInt(digit ,10)*mul;
       if (tproduct >= 10) {
          sum += (tproduct % 10) + 1;
       } else {
          sum += tproduct;
       }
       if (mul == 1) {
          mul++;
       } else {
          mul--;
       }
    }
    if ((sum % 10) == 0) {
       return (true);
    } else {
       return (false);
    }
}

function IsVisa(cc) {
    if (((cc.length == 16) || (cc.length == 13)) && (cc.substring(0,1) == 4)) {
       return isCreditCard(cc);
    }
    return false;
} 
 
function IsMasterCard(cc) {
    firstdig = cc.substring(0,1);
    seconddig = cc.substring(1,2);
    if ((cc.length == 16) && (firstdig == 5) && ((seconddig >= 1) && (seconddig <= 5))) {
       return isCreditCard(cc);
    }
    return false;
} 

function IsAmericanExpress(cc) {
    firstdig = cc.substring(0,1);
    seconddig = cc.substring(1,2);
    if ((cc.length == 15) && (firstdig == 3) && ((seconddig == 4) || (seconddig == 7))) {
       return isCreditCard(cc);
    }
    return false;
} 

function IsValidCC(Field) {
    tempString = "";
    bag = "- ";
    for (i = 0; i < Field.value.length; i++) {   
        var c = Field.value.charAt(i);
        if (bag.indexOf(c) == -1) tempString += c;
    }
    cc = tempString;
    if (!isCreditCard(cc)) {
       return false;
    }
    if (!IsMasterCard(cc) && !IsVisa(cc) && !IsAmericanExpress(cc)) {
       return false;
    }
    return true;
}