function emailSyntax(s,id)
{
 	var parts = s.split("@");
 	var part1 = parts[0];
 	var part2 = parts[1];
	
	if(s == "")
	{
		alert("Bitte fülle folgendes Feld aus: " + id);
	}
	else if(parts.length != 2)
	{		
   	alert("Falsche Mail-Adresse: das Zeichen @ wurde nicht gefunden.");
 	}
	else if(part1 == "")
	{
   	alert("Falsche Mail-Adresse: das Zeichen @ wurde am Anfang gefunden.");
 	}
	else if(part2 == "")
	{
   	alert("Falsche Mail-Adresse: das Zeichen @ wurde am Ende gefunden.");
 	}
 	else
	{
   	var r = part2.match(/([a-zA-Z0-9-]+\.)[a-zA-Z]{2,4}$/);
   	
		if(r == null)
		{
     	alert("Falsche Mail-Adresse: der Teil nach dem Zeichen @ ist ungültig.");
   	}
   	else if(part1.match(/[a-zA-Z0-9-_]+/) == null)
		{
     	alert("Falsche Mail-Adresse: der Teil vor dem Zeichen @ ist ungültig.");
   	}
   	else
		{
     	return false;
   	}
 	}
	
	return true;
}

function checkForm()
{
	var v = checkForm.arguments;
	var f = v[0];
	var b = false;
	
	for(var i = 1; i < v.length; ++i)
	{
		var s = document.getElementsByName(v[i])[0];
		
		if(v[i] == "E-Mail")
		{
			b = emailSyntax(s.value,v[i])
		}
		else if(v[i] == "Anrede")
		{
			if(!((f.Anrede[0].checked) || (f.Anrede[1].checked)))
			{
				alert("Bitte wähle eine Anrede aus.");
			
				b = true;
			}
		}
		else if(v[i] == "Zahlungsweise")
		{
			if(f.Zahlungsweise[0].checked)
			{
				var r = document.getElementsByName('Land (Rechnungsanschrift)')[0];
				
				if(r.options[r.selectedIndex].value != r.options[0].value)
				{
					alert("Zahlungen per Lastschrift sind nur in Deutschland möglich.");
							
					b = true;
				}
			}
			
			if(f.Zahlungsweise[1].checked)
			{
				var a = 15;
				var r = document.getElementsByName('amount')[0];
				
				if((parseInt(r.value)) < a)
				{
					alert("Zahlungen per Kreditkarte sind erst ab einem Rechnungsbetrag von € " + a + " und mehr möglich.");
					
					b = true;
				}
			}
			
			if(f.Zahlungsweise[2].checked)
			{
				var r = document.getElementsByName('Land (Rechnungsanschrift)')[0];
				var l = document.getElementsByName('Lieferanschrift')[0];
				
				if(r.options[r.selectedIndex].value != r.options[0].value)
				{
					alert("Zahlungen per Nachnahme sind nur in Deutschland möglich.");
							
					b = true;
				}
				else
				{
					if(l.checked)
					{
						alert("Bei Zahlungen per Nachnahme muss die Rechnungsadresse mit der Lieferadresse übereinstimmen. Bitte ändere die Zahlungsweise oder verzichte auf die Lieferadresse, um die Bestellung auszuführen.");
						
						b = true;
					}
				}
			}
		}
		else if(v[i] == "AGB")
		{
			if(!(f.AGB.checked))
			{
				alert("Du musst den AGB zustimmen, um die Bestellung auszuführen.");
			
				b = true;
			}
		}
		else if(v[i] == "Bankleitzahl")
		{
			if(s.value.length != 8)
			{
				alert("Bitte gib eine korrekte Bankleitzahl (acht Stellen) an.");
			
				b = true;
			}
		}
		else if(v[i] == "Kreditkarte")
		{
			var cn = document.getElementsByName('Kreditkartennummer')[0];
			var cc = document.getElementsByName('Kreditkarte')[0];
			var cm = document.getElementsByName('Kreditkartenablaufmonat')[0];
			var cy = document.getElementsByName('Kreditkartenablaufjahr')[0];
			
			b = validateCard(cn.value,cc.value,cm.value,cy.value);
		}
  	else if(s.value == "")
		{
			alert("Bitte fülle folgendes Feld aus: " + v[i] + ".");
				
			b = true;
		}
		
		if(b == true)
		{
			s.focus();
			
			return false;
		}
		else
		{
			continue;
		}
	}

	f.submit();
}

function setDelivery()
{
	var v = setDelivery.arguments;
	var c = v[0].checked;
	
	for(var i = 1; i < v.length; ++i)
	{
		var t = v[i].replace(/Lieferanschrift/, "Rechnungsanschrift");
		var s = document.getElementsByName(v[i])[0];
		var z = document.getElementsByName(t)[0];

		if(c)
		{
			if(s.type == "select-one")
			{
				s.value = z.options[z.options.selectedIndex].value;
			}
			else
			{
				s.value = "";
			}
			
			s.disabled = false;
		}
		else
		{
			s.value = z.value;
			s.disabled = true;
		}
	}
}

function validateCard(cardNumber,cardType,cardMonth,cardYear)
{
	if(cardNumber.length == 0)
	{
		alert("Bitte trage eine gültige Kartennummer ein.");
		
		return true;				
	}

	for(var i = 0; i < cardNumber.length; ++i)
	{
		var c = cardNumber.charAt(i);

		if(c < '0' || c > '9')
		{
			alert("Bitte trage eine gültige Kartennummer ein. Es können nur Zahlen verwendet werden. Benutze keine Freizeichen oder Sonderzeichen.");
			
			return true;
		}
	}

	var length = cardNumber.length;

	switch(cardType)
	{
		case 'VISA':
			
			if(length != 16 && length != 13)
			{
				alert("Bitte trage eine gültige " + cardType + "-Kartennummer ein.");
				
				return true;
			}
			
			var prefix = parseInt(cardNumber.substring(0,1));
			
			if(prefix != 4)
			{
				alert("Bitte trage eine gültige " + cardType + "-Kartennummer ein.");
				
				return true;
			}
			
			break;
			
		case 'MASTERCARD':
		
			if(length != 16)
			{
				alert("Bitte trage eine gültige " + cardType + "-Kartennummer ein.");
				
				return true;
			}
			
			var prefix = parseInt(cardNumber.substring(0,2));
			
			if(prefix < 51 || prefix > 55)
			{
				alert("Bitte trage eine gültige " + cardType + "-Kartennummer ein.");
				
				return true;
			}
			
			break;

		case 'EUROCARD':
			
			if(length != 16)
			{
				alert("Bitte trage eine gültige " + cardType + "-Kartennummer ein.");
				
				return true;
			}
			
			var prefix = parseInt(cardNumber.substring(0,2));
			
			if(prefix < 51 || prefix > 55)
			{
				alert("Bitte trage eine gültige " + cardType + "-Kartennummer ein.");
				
				return true;
			}
			
			break;
	}
		
	if(!mod10(cardNumber))
	{
		alert("Dies ist keine gültige Kartennummer.");
		
		return true;
	}
		
	if(expired(cardMonth,cardYear))
	{
		alert("Deine Karte ist nicht mehr gültig.");
		
		return true;
	}
									
	return false;
}
		
function mod10(cardNumber)
{
	var ar = new Array(cardNumber.length);
	var i = 0;
	var sum = 0;

	for(i = 0; i < cardNumber.length; ++i)
	{
		ar[i] = parseInt(cardNumber.charAt(i));
	}

	for(i = ar.length - 2; i >= 0; i -= 2)
	{
		ar[i] *= 2;
		
		if(ar[i] > 9)
		{
			ar[i] -= 9;
		}
	}

	for(i = 0; i < ar.length; ++i)
	{
		sum += ar[i];
	}
	
	return(((sum % 10) == 0) ? true : false);	 	
}

function expired(month,year)
{
	var now = new Date();
	var expiresIn = new Date(year,month,0,0,0);

	expiresIn.setMonth(expiresIn.getMonth());

	if(now.getTime() < expiresIn.getTime())
	{
		return false;
	}
	
	return true;
}
