function RacingJack() {
	var userCardValue = 0;
	var computerPlayer = createComputerPlayerArray();
	var card = new Array();
	var cardsWidthNormalValues = 5;
	var cardsWidthNotNormalValues = 3;
	var totalCardAmmount = cardsWidthNormalValues + cardsWidthNotNormalValues;
	for (var i = 0; i <= cardsWidthNormalValues; i++) {
		card[i] = i;
		card[i] = new Array();
		card[i]['name'] = 'cardNumber_' + i + '_normal';
		card[i]['value'] = i;
		card[i]['image'] = 'modules/racingJack/images/33316fh_test.jpg';
	}
	for (var i = 0; i <= cardsWidthNotNormalValues; i++) {
		var cardNumber = i + cardsWidthNormalValues;
		if (cardNumber == 8) {
			var value = 7;
		} else if (cardNumber == 9) {
			var value = 9;
		} else {
			var value = 11;
		}
		card[cardNumber] = cardNumber;
		card[cardNumber] = new Array();
		card[cardNumber]['name'] = 'cardNumber_' + cardNumber + '_normal';
		card[cardNumber]['value'] = value;
		card[cardNumber]['image'] = 'modules/racingJack/images/33316fh_test.jpg';
	}
	function createComputerPlayerArray() {
		var computerPlayer = new Array();
		computerPlayer['name'] = 'Fiona';
		computerPlayer['image'] = '/images/racingJack/player2.jpg';
		computerPlayer['winText1'] = 'I won Dude';
		computerPlayer['winText1'] = 'haha you lost from me';
		computerPlayer['winText1'] = 'You lost. You better give up.';
		computerPlayer['winText1'] = 'I think i am the best player here. You lost';
		computerPlayer['welcomeText2'] = 'Hey there. You can\'t beat me and you know that right?';
		computerPlayer['welcomeText1'] = 'Hey kanjer. Zin om te spelen? Druk op start om het spel te starten. Klik vervolgens op "Nog een nummer" om nog een nummer te krijgen. Zorg ervoor dat je meer dan 15 punten hebt maar niet meer dan 21. Als je er meer heb betekend dat je automistisch verloren heb. Dat willen wij niet toch?';
		return computerPlayer;
	};
	function sameCards(userValueNumber, computerValueNumber) {
		if (userValueNumber == computerValueNumber) {
			return true
		}
		return false;
	};
	function drawGame() {
		alert('Gelijk spel');
	};
	function getComputerCardNumber() {
		var minimumNumber = 15;
		var randomnumber = Math.floor(Math.random() * 8);
		var computerTotal = minimumNumber + randomnumber;
		return computerTotal;
	};
	function calculateUserNumber() {
		var randomnumber = Math.floor(Math.random() * 11);
		userCardValue = userCardValue + randomnumber;
		return userCardValue;
	};
	function checkIfNummberIsAllowed(number) {
		var maxAllowedNumber = getMaxAllowedNumber();
		if (number <= maxAllowedNumber) {
			return true;
		}
		return false;
	};
	function getMinimumNumber() {
		var minimumNumber = 15;
		return minimumNumber;
	};
	function getMaxAllowedNumber() {
		var maxAllowedNumber = 21;
		return maxAllowedNumber;
	};
	function resetGame() {
		rdyButton.disable();
		newCardButton.disable();
		userCardValue = 0;
		setUserValue(userCardValue);
		setComputerValue(userCardValue);
		startButton.enable();
		userMoneyInput.enable();
	};
	function setComputerValue(computerTotal) {
		computerField.setValue(computerTotal);
	};
	function getComputerValue() {
		var value = computerField.getValue();
		return value;
	};
	function userNextCard() {
		startButton.disable();
		var playingMoney = userMoneyInput.getValue();
		var minimumNumber = getMinimumNumber();
		var userCurrentNumber = calculateUserNumber();
		var computerNumber = getComputerValue();
		playerField.setValue(userCurrentNumber);
		if (userCurrentNumber >= minimumNumber) {
			rdyButton.enable();
		}
		if (!checkIfNummberIsAllowed(userCurrentNumber)) {
			userLostTheMatch(userCurrentNumber, computerNumber, 'toHighNumber',
					playingMoney);
			return;
		}
	};
	function userCheckMoney(type) {
		if (type == 'start') {
			data = {
				'page' : 'checkUserMoney',
				'gameMoney' : getMoneyValue()
			};
		}
		if (type == 'finish') {
			data = {
				'page' : 'checkUserMoney',
				'gameMoney' : getMoneyValue()
			};
		}
		var conn = new Ext.data.Connection();
		conn.request({
			url : 'modules/racingJack/pages/racingJack.php',
			method : 'POST',
			params : data
		});
		conn.on('requestcomplete', function(sender, param) {
			response = siteFunctions.jsonDecode(param.responseText);
			if (type == 'finish') {
				if (response['result']) {
					userFinishGame();
				} else {
					siteFunctions.checkResultAlert(response['result'],
							response['message']);
				}
			}
			if (type == 'start') {
				if (response['result']) {
					userStartGame();
				} else {
					siteFunctions.checkResultAlert(response['result'],
							response['message']);
				}
			}
		});
	};
	function userFinishGame() {
		var computerTotal = getComputerCardNumber();
		setComputerValue(computerTotal);
		newCardButton.disable();
		startButton.enable();
		rdyButton.disable();
		var playingMoney = userMoneyInput.getValue();
		var computerValueNumber = getComputerValue();
		var userValueNumber = getUserValue();
		if (sameCards(userValueNumber, computerValueNumber)) {
			drawGame();
			return;
		}
		if (!checkIfNummberIsAllowed(userValueNumber)) {
			userLostTheMatch(userValueNumber, computerValueNumber, null,
					playingMoney);
			return;
		}
		if (!checkIfNummberIsAllowed(computerValueNumber)) {
			userWonTheMatch(userValueNumber, computerValueNumber,
					'compToHighNumber', playingMoney);
			return;
		}
		if (userValueNumber < computerValueNumber) {
			userLostTheMatch(userValueNumber, computerValueNumber, null,
					playingMoney);
			return;
		}
		if (computerValueNumber < userValueNumber) {
			userWonTheMatch(userValueNumber, computerValueNumber, '',
					playingMoney);
			return;
		}
	};
	function checkUserMoney() {
		return true;
	};
	function getMoneyValue() {
		return userMoneyInput.getValue();
	};
	function userStartGame() {
		resetGame();
		if (!checkUserMoney()) {
			alert('Je hebt niet genoeg geld om dit spel te kunnen spelen');
			userMoneyInput.enable();
			return;
		}
		if (getMoneyValue() < 1) {
			alert('Selecteer eerst een geld bedrag.');
			userMoneyInput.enable();
			return;
		}
		userMoneyInput.disable();
		var usernumber = calculateUserNumber();
		var userValueNumber = 0;
		var computerValueNumber = 0;
		var playingMoney = userMoneyInput.getValue();
		if (!checkIfNummberIsAllowed(usernumber)) {
			userLostTheMatch(userValueNumber, computerValueNumber, null,
					playingMoney);
			return;
		}
		setUserValue(usernumber);
		startButton.disable();
		newCardButton.enable();
	};
	var playerField = new Ext.form.TextField({
		fieldLabel : 'Jouw Score: ',
		width : 130,
		hideLabel : false,
		value : 0,
		disabled : true
	});
	var computerField = new Ext.form.TextField({
		fieldLabel : 'Computer Score ',
		width : 130,
		hideLabel : false,
		value : 0,
		disabled : true
	});
	var firstSelection = 500;
	var moneyStore = new Ext.data.SimpleStore({
		fields : ['name'],
		data : [[firstSelection], [1000], [2000], [4000], [8000]]
	});
	var userMoneyInput = new Ext.form.ComboBox({
		displayField : 'name',
		store : moneyStore,
		fieldLabel : 'Inzet Geld €',
		displayField : 'name',
		mode : 'local',
		emptyText : 'Selecteer je inzet',
		allowBlank : false,
		triggerAction : 'all',
		editable : false,
		width : 130
	});
	var newCardButton = new Ext.Button({
		text : 'Nog een kaart',
		iconCls : 'next',
		disabled : true,
		handler : function() {
			userNextCard();
		}
	});
	var rdyButton = new Ext.Button({
		text : 'Klaar',
		disabled : true,
		iconCls : 'next',
		handler : function() {
			userCheckMoney('finish');
		}
	});
	var startButton = new Ext.Button({
		text : 'Start',
		iconCls : 'startMiniGame',
		handler : function() {
			userCheckMoney('start');
		}
	});
	var computerPlayerInfo = new Ext.Panel({
		title : computerPlayer['name'],
		height : 160,
		region : 'center',
		width : 400,
		frame : true,
		html : '<center><img src="' + computerPlayer['image']
				+ '" class="normalImage" height="150" width="130"</center>'
	});
	var computerPlayerTextPanel = new Ext.Panel({
		title : computerPlayer['name'] + ' commentaar',
		region : 'east',
		width : 180,
		height : 160,
		frame : true,
		html : computerPlayer['welcomeText1']
	});
	var computerPlayerPanel = new Ext.Panel({
		layout : 'border',
		region : 'center',
		height : 180,
		width : 700,
		items : [computerPlayerInfo, computerPlayerTextPanel]
	});
	var racingJackPanel = new Ext.FormPanel({
		title : 'RacingJack V1',
		height : 180,
		region : 'west',
		width : 260,
		frame : true,
		items : [playerField, computerField, userMoneyInput],
		buttons : [startButton, newCardButton, rdyButton]
	});
	var panel = new Ext.Panel({
		height : 200,
		layout : 'border',
		width : 1000, //630
		frame : false,
		items : [computerPlayerPanel, racingJackPanel]
	});
	function userWonTheMatch(userValue, computerValue, winType, money) {
		switch (winType) {
			case 'compToHighNumber' :
				updateUser('winner', money);
				alert('<b>Je hebt '
						+ money
						+ ' Gewonnen. De computer had een te hoge nummer. Nummer: '
						+ computerValue + '</b>');
				break;
			default :
				updateUser('winner', money);
				alert('<b>Je hebt ' + money
						+ ' Gewonnen.<br>Jouw kaart nummer: ' + userValue
						+ '<br>Computer kaart nummer: ' + computerValue
						+ '</b>');
				break;
		}
		resetGame();
	};
	function userLostTheMatch(userValue, computerValue, loseType, money) {
		switch (loseType) {
			case 'toHighNumber' :
				updateUser('loser', money);
				alert('Je hebt ' + money
						+ ' verloren. Je totaal nummer is te hoog. Nummer: '
						+ userValue + '</b>');
				break;
			default :
				updateUser('loser', money);
				alert('<b>Je hebt ' + money
						+ ' verloren.<br>Jouw kaart nummer: ' + userValue
						+ '<br>Computer kaart nummer: ' + computerValue
						+ '</b>');
				break;
		}
		resetGame();
	};
	function updateUser(winLose, money) {
		var conn = new Ext.data.Connection();
		conn.request({
			url : 'modules/racingJack/pages/racingJack.php',
			method : 'POST',
			params : {
				'page' : 'updateRacingJack',
				'winLose' : winLose,
				'gameMoney' : money
			}
		});
		conn.on('requestcomplete', function(sender, param) {
			response = siteFunctions.jsonDecode(param.responseText);
			if (!response['result']) {
				siteFunctions.checkResultAlert(response['result'],
						response['message']);
			}
		});
	};
	function getUserValue() {
		var value = playerField.getValue();
		return value;
	};
	function setUserValue(value) {
		playerField.setValue(value);
	};
	siteFunctions.showWindow(panel, 180, 620, 'racingJackID', true);
	Ext.getCmp('racingJackID').show();
}