

<!-- Copyright 2000 by void (aka Arjan Haverkamp)      -->
<!-- You are free to borrow and modify this Javascript -->
<!-- but keep this credit intact!                      -->
<!-- Thanks, arjan@avoid.org, http://www.avoid.org     -->

if (document.images)
{
   var bang = new Image(); bang.src = "http://images.brettspielnetz.de/bang.gif";
   var star = new Image(); star.src = "http://images.brettspielnetz.de/star.gif";
   var blank = new Image(); blank.src = "http://images.brettspielnetz.de/blank.gif";
}

function message(id, alt)
{
	var ms = msgs[id];
	if (alt) ms = ms.replace(/#1/g, alt);
	alert(ms);
	return false;
}

function preCheck()
{// This function is only needed, when the user hits the back- or
 // forward-button in his browser. We need to check again, in order
 // to let bangs and stars disappear.

	for (k = 0; k < document.js_form.elements.length; k++)
	{
		naam = document.js_form.elements[k].name;
		if (naam.charAt(0) == "j" && naam.charAt(1) == "s")
			checkField(document.js_form.elements[k], 1, true);
	}
}

function inputCorrect(bool, img_name, first_time)
{// If 'bool' == true: 'img_name' becomes a blank.
 // If 'bool' == false: 'img_name' becomes a bang.
	if (document.images)
	{
		if (bool)
			document.images[img_name].src = blank.src;
		else {
			if (first_time)
				document.images[img_name].src = star.src;
		else
            document.images[img_name].src = bang.src;
		}
	}
}

function checkField(ft, nr_required, first_time)
{// This function is called to check whether a required textfield was
 // actually filled!

	if (!document.images) return;
	if ((ft.type == "select-multiple" || ft.type == "checkbox") && !nr_required)
		nr_required = 1;
     
	var ok = false;
	if (ft.type == "text" || ft.type == "textarea" || ft.type == 'password')
	{
		ok = ft.value != "";
		if (ft.value == "http://") ok = false;
	}
	else if (ft.type == "select-one")
		ok = ft.options[ft.selectedIndex].value != "-1";
	else if (ft.type == "select-multiple")
	{
		selected_counter = 0;
		for (i = 0; i < ft.length; i++)
			if(ft.options[i].selected) 
				selected_counter++;
		ok = selected_counter >= nr_required;
	}
	else if (ft.type == "radio")
	{
		for (i = 0; i < document.js_form.elements.length; i++)
		{
			if (document.js_form.elements[i].name == ft.name && document.js_form.elements[i].checked)
			{
				ok = true; 
				break;
			}
		}
	}
	else if (ft.type == "checkbox")
	{
		selected_counter = 0;
		for (i = 0; i < document.js_form.elements.length; i++)
		{
			if (document.js_form.elements[i].name == ft.name &&
	      document.js_form.elements[i].checked)
				selected_counter++;
		}
		ok = selected_counter >= nr_required;
	}
	else if (ft.type == "hidden")
		return;
	else
		message(0, ft.type);
	inputCorrect(ok, ft.name, first_time);
}

function validNumber(nr)
{
	var re = new RegExp("^[0-9]+$");
	if (!re.test(nr)) {
		return message(1);
	}
	else
		return true;
}

function validString(string)
{
	var re = new RegExp("^[A-Za-z\-\_ ]+$");
	if (!re.test(string)) 
		return message(2);
	else
		return true;
}

function validZIPcode(pc)
{
	var re = new RegExp("^" + zipcodeFormat + "$");
	if (!re.test(pc)) 
		return message(3)
	else
		return true;
}

function validDate(dob)
{
	re = new RegExp("^[0-9]+$");
	d = dob.substring(dateFormat.indexOf("DD"), dateFormat.indexOf("DD")+2);
	m = dob.substring(dateFormat.indexOf("MM"), dateFormat.indexOf("MM")+2);
	y = dob.substring(dateFormat.indexOf("YYYY"), dateFormat.indexOf("YYYY")+4);
	d++;d--;m++;m--;y++;y--;

	var l = false;
	if (((y % 400 == 0) && (y % 100 != 0)) || (y % 400 == 0)) l = true;
	
	var error = false;
	if (!re.test(d) || !re.test(m) || !re.test(y)) error = true;
	else if (y < 1 || d < 1 || m < 1 || m > 12) error = true;
	else if (!l && m == 2 && d > 28) error = true;
	else if (l && m == 2 && d > 29) error = true;
	else if ((m==1 || m==3 || m==5 || m==7 || m==8 || m==10 || m==12) && d > 31) error = true;
	else if (d > 30) error = true;
	if (error) 
		return message(4, dateFormat)
	else
		return true;
}

function validEmail(mail)
{
	var re = new RegExp("^[^@]+@(\[?)([A-Za-z0-9\_\-]+\\.)+[A-Za-z0-9\_\-]+(\]?)$");
	if (!re.test(mail)) 
		return message(5);
	else
		return true;
}

function validURL(url)
{
	var re = new RegExp("^http://.+$");
	if (!re.test(url)) 
		return message(6);
	else
		return true;
}
	
function checkAllFields()
{// Checks if all required fields are filled with values that make sense.

   // Which fields are required exactly?
	for (i = 0; i < document.images.length; i++) {
		im = document.images[i].src;
		nm = document.images[i].name;
		if (nm.substring(0,3) == "js_" && (im.indexOf("star.gif") != -1 || im.indexOf("bang.gif") != -1))
			return message(8);
	}
	for (i = 0; i < document.js_form.elements.length; i++)
	{
		elem = document.js_form.elements[i].name;
		if(elem.charAt(0) == "j" && elem.charAt(1) == "s")
		{
			if (elem.charAt(3) == "t")
			{// Textfield

				value = document.js_form.elements[elem].value;
				if (value == "")
				{// Check if some value is entered at all.
					message(7);
					document.js_form.elements[elem].focus();
					return false;
				}
				else if(elem.charAt(4) == "n" && !validNumber(value))
				{// Numbers only.
					document.js_form.elements[elem].focus();
					return false;
				}
				else if (elem.charAt(4) == "s" && !validString(value))
				{// Letters (string) only.
					document.js_form.elements[elem].focus();
					return false;
				}
				else if (elem.charAt(4) == "z" && !validZIPcode(value))
				{// ZIPcode only.
					document.js_form.elements[elem].focus();
					return false;
				}
				else if (elem.charAt(4) == "d" && !validDate(value))
				{// Dates only.
					document.js_form.elements[elem].focus();
					return false;
				}
				else if (elem.charAt(4) == "e" && !validEmail(value))
				{// E-mail addresses only.
					document.js_form.elements[elem].focus();
					return false;
				}
				else if (elem.charAt(4) == "u" && !validURL(value))
				{// URL's only.
					document.js_form.elements[elem].focus();
					return false;
				}
				else if (elem.charAt(4) == "a")
				{// Anything is allowed here.
				}
			}
		}
	}
	return true;
}


var msgs = new Array(
"Nicht implementiert: #1!",
"Gib bitte eine gültige Nummer ein!",
"Nur Buchstaben sind erlaubt!",
"Gib bitte eine gültige Postleitzahl an!",
"Gib bitte ein gültiges Datum an! (#1)",
"Gib bitte eine gültige Mailadresse an! (wer@wo.de)",
"Gib bitte eine gültige URL an (beginnend mit http://)",
"Gib bitte einen Wert ein!",
"Nicht alle verpflichtenden Felder sind ausgefüllt!"
);
dateFormat = "DD-MM-YYYY";
zipcodeFormat = "[0-9]{5}";

var v = parseInt(navigator.appVersion);
var ns4 = (navigator.appName=='Netscape' && v>=4 && v<5);
var ns6 = (navigator.appName=='Netscape' && v>=5);
var ie4 = (navigator.appName=='Microsoft Internet Explorer' && v>=4);
var newWin;
var url="http://www.brettspielnetz.de"; 
var title="Brettspielnetz.de"; 

function SetCookie(cookieName,cookieValue,nDays) {
 var today = new Date();
 var expire = new Date();
 if (nDays==null || nDays==0) nDays=1;
 expire.setTime(today.getTime() + 3600000*24*nDays);
 document.cookie = cookieName+"="+escape(cookieValue)
                 + ";expires="+expire.toGMTString();
}

function ReadCookie(cookieName) {
 var theCookie=""+document.cookie;
 var ind=theCookie.indexOf(cookieName);
 if (ind==-1 || cookieName=="") return ""; 
 var ind1=theCookie.indexOf(';',ind);
 if (ind1==-1) ind1=theCookie.length; 
 return unescape(theCookie.substring(ind+cookieName.length+1,ind1));
}

function SetMededeling(id,cookieName,cookieValue,nDays) {
	SetCookie(cookieName,cookieValue,nDays);
	document.getElementById("mededeling" + id).innerHTML = ""; 
}

function mededeling(id, titel, tekst){
	var username= ReadCookie('mededeling');
	var cookienaam= username + "med" + id;
	var waarde=1;
	if(ReadCookie(cookienaam) !=1){
		document.write("<div id='mededeling" + id + "'><b>" + titel + "</b> (<a href='javascript:SetMededeling(\"" + id + "\",\""+ cookienaam + "\",\"" + waarde+ "\", \"10\");' onMouseOver=\"window.status='Haal mededeling weg';return true;\" onMouseOut=\"window.status='';return true;\" title=\"Mitteilung löschen\">X</a>)");
		document.write ("<br><small>" + tekst + "</small></div>");
	}
}

function favorites(){ 
	if(document.all) 
	window.external.AddFavorite(url,title)
}

function js_write(txt){
	document.write(txt);
}

function bbplace(text) {
    var txtarea = document.post.message;
    if (txtarea.createTextRange && txtarea.caretPos) {
        var caretPos = txtarea.caretPos;
        caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text;
        txtarea.focus();
    } else if (txtarea.selectionStart || txtarea.selectionStart == '0') {
        var startPos = txtarea.selectionStart;
        var endPos = txtarea.selectionEnd;
        txtarea.value = txtarea.value.substring(0, startPos)
                      + text
                      + txtarea.value.substring(endPos, txtarea.value.length);
        txtarea.focus();
        txtarea.selectionStart = startPos + text.length;
        txtarea.selectionEnd = startPos + text.length;
    } else {
        txtarea.value  += text;
        txtarea.focus();
    }
}

function emoticon(text) {

	var txtarea = document.post.message;
	text = ' ' + text + ' ';
	
	if (txtarea.createTextRange && txtarea.caretPos) {
		var caretPos = txtarea.caretPos;
		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text;
		txtarea.focus();
	} else {
		bbplace(text);
		txtarea.focus();
	}
}

function setSelectionRange(input, selectionStart, selectionEnd) {
  if (input.setSelectionRange) {
    input.focus();
    input.setSelectionRange(selectionStart, selectionEnd);
  }
  else if (input.createTextRange) {
    var range = input.createTextRange();
    range.collapse(true);
    range.moveEnd('character', selectionEnd);
    range.moveStart('character', selectionStart);
    range.select();
  }
}

function showsupportid() {
	var id=document.post.dropdown.selectedIndex;
	var textsupport=URLDecode(tekst[id]) ;
	insertAtCursor(document.post.message,textsupport);
}

function URLDecode(psEncodeString) 
{
  // Create a regular expression to search all +s in the string
  var lsRegExp = /\+/g;
  // Return the decoded string
  return unescape(String(psEncodeString).replace(lsRegExp, " ")); 
}


function insertAtCursor(myField, myValue) {
	//IE support
	if (document.selection) {
		myField.focus();
		sel = document.selection.createRange();
		sel.text = myValue;
		sel.select();
	}
	//MOZILLA/NETSCAPE support
	else if (myField.selectionStart || myField.selectionStart == '0') {
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		myField.value = myField.value.substring(0, startPos)
		+ myValue
		+ myField.value.substring(endPos, myField.value.length);
		//setSelectionRange(MyField, startPos, endPos);
	} 
	else {
		myField.value += myValue;
	}
}


function openWin(url, width, height, scrollbars, toolbar, target)
{
	var left, top;
	(ie4) ? left = window.screenLeft : left = window.screenX;
	(ie4) ? top = window.screenTop : top = window.screenY;
	var rnd = Math.round(Math.random() * 100);

	scrollbars = (scrollbars) ? 'yes' : 'no';
	toolbar = (toolbar) ? 'yes' : 'no';
	target = (target) ? target : 'Jijbent'+rnd;
	newWin = window.open(url, target, 'left='+left+',top='+top+',width='+width+',height='+height+',toolbar='+toolbar+',directories=no,status=no,resizable=yes,menubar=no,scrollbars='+scrollbars);
	if (newWin.opener == null) newWin.opener = self;
	setTimeout('if (newWin != null && !newWin.closed) newWin.focus()',250);
}

//if (self != top)
//setTimeout('parent.location.href = self.location',1000);

function checkAll(form,what) {
   for (i=0; i<form.elements.length;i++) {
      if (form.elements[i].type == "checkbox") {
         form.elements[i].checked = what;
      }
   }
}

function toggleDisplay(eleId){
   var dsp = document.getElementById(eleId);

	 dsp.style.display = (dsp.style.display == "none") ? "block" : "none";
}

function ShowAllRatings(){
   var TDs = document.getElementsByTagName('td');
   for (var i=0;i < TDs.length;i++){
      TDs[i].style.display = (TDs[i].style.display=='' && TDs[i].v==0) ? 'none' : '' ;
   }
} 

function ShowAllPlayers(){
   var TRs = document.getElementsByTagName('tr');
   for (var i=0;i < TRs.length;i++){
      TRs[i].style.display = (TRs[i].style.display=='' && TRs[i].v==0) ? 'none' : '' ;
   }
}

function ShowAllPlays(){
   var TRs = document.getElementsByTagName('tr');
   for (var i=0;i < TRs.length;i++){
      TRs[i].style.display = (TRs[i].style.display=='' && TRs[i].p==0) ? 'none' : '' ;
   }
}


TrapClicksForHowManySeconds = 10;
TrapTime = 0;
DoubleClickTrapperCounter = 0;

function DoubleClickTrapperAction() {
DoubleClickTrapperCounter++;

var trapTheClick = false;
if(DoubleClickTrapperCounter > 1 ) { trapTheClick = true; }
if(trapTheClick == true) {
	alert ("Doppelt klicken ist nicht nötig");
	if(TrapTime == 0) {
		var tDate = new Date;
		TrapTime = tDate.valueOf();
		}
	else {
		var tDate = new Date;
		var localTrapTime = tDate.valueOf();
		if((localTrapTime - TrapTime) > (TrapClicksForHowManySeconds * 1000)) {
			TrapTime = 0;
			trapTheClick = false;
			DoubleClickTrapperCounter = 0;
			}
		}
	}
var valueToReturn = true;
if(trapTheClick == true) {
	valueToReturn = false;

	}
return valueToReturn;
} // end of function DoubleClickTrapperAction()

function URLEncode(string){					
	string = string.replace(/\r\n/g,"\n");
	var utftext = "";	
	for (var n = 0; n < string.length; n++) {	
		var c = string.charCodeAt(n);	
		if (c < 128) {	
			utftext += String.fromCharCode(c);	
		}
		else if((c > 127) && (c < 2048)) {
			utftext += String.fromCharCode((c >> 6) | 192);
			utftext += String.fromCharCode((c & 63) | 128);
		}
		else {			
			utftext += String.fromCharCode((c >> 12) | 224);	
			utftext += String.fromCharCode(((c >> 6) & 63) | 128);
			utftext += String.fromCharCode((c & 63) | 128);
		}
	}	
    return escape(utftext);	
}	

// Attention:
var IMAGELOC='http://images.brettspielnetz.de';
var SUBMIT_MOVE='Zug ausf&uuml;hren';
var GIVE_UP='Aufgeben';
var TAKE_BACK='Zur&uuml;cknehmen';
var SUBMIT_MOVE_NEXT='Zug ausf&uuml;hren und zum n&auml;chsten Spiel';
var NEXT_GAME_NO_MOVE='Ohne Zug zum n&auml;chsten Spiel';
var OFFER_DRAW='Remis anbieten';
var CONFIRM_GIVE_UP='Bist du sicher, dass du aufgeben willst?'
var NO_MOVES_POSSIBLE='Keine Züge mehr möglich.'; // ATTENTION: There have to be the German umlaut!
var SKIP_TURN='Auf Zug verzichten';
var CONFIRM_NO_MOVE='Bist du sicher, dass du keinen Zug machen willst?';
var CONFIRM_PASS='Bist du sicher, dass du passen willst?';
var UNDO='R&uuml;ckg&auml;ngig machen';
var PASS='Passen';
var PASS_NEXT_GAME='Passen und zum n&auml;chsten Spiel gehen';
var AND_WB=' und '; // And with blanks left and right
var VALUE='Wert';
var POINTS='Punkte';
var CHANGE='Tauschen';
var CHANGE_NEXT_GAME='Tauschen und zum n&auml;chsten Spiel';
var CONFIRM_CHANGE='Bist du sicher, dass du tauschen willst?';
var DISCARD='Ablegen';
var DISCARD_NEXT_GAME='Ablegen und zum folgenden Spiel';
var CONFIRM_DISCARD='Bist du sicher, dass du ablegen willst?';

//backgammon
var SWAP_DICES='Klicke auf einen W&uuml;rfel um die Reihenfolge zu tauschen';
var BAR='Bar';
var OUT='Aus';

//holomino//
var CHOOSE_PIECE='Wähle erst ein Teil.';
var PIECE_NOT_POSSIBLE='Das Teil passt hier nicht hin.';

//KAHUNA
var MAX_5_PIECES='Du darfst maximal 5 Karten auf der Hand halten.';
var SELECT_CARD_FIRST='Du musst erst eine Karte auswählen, um sie wegzulegen.';
var CARDS_IN_STACK='Karten im Stapel';
var MUST_TAKE_CARD='Du musst eine Karte vom Stapel ziehen.';
var CONFIRM_NO_CARD='Bist du sicher, dass du keine Karte spielen willst?';
var CONFIRM_NO_STACK='Bist du sicher, dass du keine Karte ziehen willst?';

//SCRABBLE/WORDGAME//
// var ERROR_MORE_EIGHT_LETTERS='Foutmelding: voorraadletters>8 niet mogelijk';
// var ERROR_XY_EIGHT='Foutmelding: printVoorraad: X * Y moet 8 zijn!';
// var CHECK_FOR_VALID_WORDS='Check of woorden geldig zijn';
var ERROR_MORE_EIGHT_LETTERS='Fehler: Mehr als 8 Zeichen im Vorrat!';
var ERROR_XY_EIGHT='Fehler: printVoorraad: X * Y muss 8 sein!';
var CHECK_FOR_VALID_WORDS='Prüfe, ob das gelegte Wort gültig ist.';

//RUMMY//
var WRONG_PIECE_SUPPLY='Falscher Wert im Vorrat';
var EXACT_SAME_SUPPLY='Genau der gleiche Vorrat an Steinen!';
var MORE_THAN_TWELVE='Mehr als 12 Steine gespielt';
var SORT_COLOUR='Sortiere nach Farbe';
var SORT_NUMBER='Sortiere nach Zahlen';
var ALERT_12_STONES_MAX='Achtung: Du darfst maximal 12 Steine in 1 Zug ablegen!';

//NAVAL BATTLE//
var CHANGE_ORIENTATION='Schiff drehen';

//PICK AND PACK//
//Popups: UTF8//
var APPLE='Apfel';
var APPLES='Äpfel';
var DISABLED='(ungültig)';
var PREMIUM='Premium';
var WHOLESALE='Großhandel';
var QUALITY_CONTROL='Qualitätskontrolle';
var RUSH_ORDER='Eilauftrag';
var ORDER_MIXUP='Vertauschte Lieferung';
var MALFUNCTION='Fehlfunktion';
var USED='(verbraucht)';
var USED2='(beide verbraucht)';
//Displayed on the screen: HTML Code//
var PLACE_ACTION_TILES='Platziere deine Aktionskarten:';
var FIRST_SELECT_MARKER='W&auml;hle zuerst den Markierstein';
var HORIZONTAL='Horizontal.';
var VERTICAL='Vertikal.';
var PICK_A_TRAY_OR_EMPTY_SPOT='W&auml;hle eine Apfelschale aus oder ein leeres Feld f&uuml;r eine Aktion.';
var SELECT_PACKING_CRATE='W&auml;hle eine Kiste f&uuml;r die markierte Apfelschale.';
var PICK__ACTION_TILE='W&auml;hle deine Aktionskarte aus.';
var MOVE_FINISHED='Zug beendet.';
var CLICK_ON_RUSH_ORDER='F&uuml;r einen weiteren Zug klicke auf Eilauftrag (falls verf&uuml;gbar) und "Zug ausf&uuml;hren".';
var WHOLESALE_TEXT='Gro&szlig;handel: W&auml;hle eine Kiste deines Gegner für den Gro&szlig;handel.';
var PREMIUM_TEXT='Premium: W&auml;hle eine deiner Kisten als Premiumqualität aus.';
var QUALITY_TEXT='Qualit&auml;tskontrolle: W&auml;hle eine der obersten Schalen aus den gegnerischen Kisten, um sie bei dir abzulegen.';
var QUALITY_TEXT2='Qualit&auml;tskontrolle: W&auml;hle eine deiner Kisten, um die Schale deines Gegner hinzuzuf&uuml;gen.';
var ORDER_MIX_TEXT='Vertauschte Lieferung: Tausche 2 obere Schalen aus, w&auml;hle zuerst die deines Gegners.';
var ORDER_MIX_TEXT2='Vertauschte Lieferung: W&auml;hle eine deiner Kiste, um sie mit der gegnerischen auszutauschen.';
var MALFUNCTION_TEXT='Fehlfunktion: W&auml;hle eine Kiste auf dem Feld oder eine gegnerische Aktionskarte.';

//MINESWEEPER//
var CLICK_ONCE='1x klicken zum Feld erforschen, 2x klicken zum Mine markieren.';
var GUESS_BOMB='Markieren, dass hier eine Mine liegt.';
var SHOW_BOMBS='Anzeigen, wieviele Minen in der Nachbarschaft liegen.';

//CROSSUMS/SUMMY//
var CHANGE_NUMBERS='Wenn du Steine tauschen willst, klicke hier. Dann w&auml;hle.';
var DISCARD_NUMBERS='Wenn du Steine ablegen willst, klicke hier. Dann w&auml;hle.';
var SELECT_NUMBERS='Hake die K&auml;stchen unterhalb der Steine an, die du tauschen willst.';
var SELECT_DNUMBERS='Hake die K&auml;stchen unterhalb der Steine an, die du ablegen willst.';
var NEW_POINTS='Punkte mit diesem Zug';
