var Database = new Class({
	
	// implements
	Implements: [Options],

	// options
	options: {
		user_id: 0,
		user_game_id: 0
	},

	match_id: 0,
	match_game_id: 0,
	
	
	// initialization
	initialize: function(options) {
		this.setOptions(options);
		
		return this;
	},


	addUser: function(username, source) {
		var due = this.doesUserExist(username); 
		if (due && due.length && !isNaN(due[0].user_id) && due[0].user_id) {
			return due[0].user_id;
		}
		
		var ret = false;
		var reqUrl = '/?user/insert/'+username+'/'+username+'/'+source;
		var myHTMLRequest = new Request.JSON({
			url: reqUrl,
			method: 'post',
			async: false,
			onSuccess : function(response) {
				ret = response.user_id;
		    }
		}).send();
		
		return ret;
	},
	
	
	doesUserExist: function(username) {
		var ret = false;
		var reqUrl = '/?user/doesExist/'+username;
		var myHTMLRequest = new Request.JSON({
			url: reqUrl,
			method: 'post',
			async: false,
			onSuccess : function(response) {
				ret = response;
			}
		}).send();
		
		return ret;
	},
	

	loadUser: function(username) {
		var ret = false;
		var reqUrl = '/?user/load/'+username;
		var myHTMLRequest = new Request.JSON({
			url: reqUrl,
			method: 'post',
			async: false,
			onSuccess : function(response) {
		    	ret = response;
		    }
		}).send();
		
		return ret;
	},
	
	
	loadGames: function() {
		var ret = new Array();
		var reqUrl = '/remoting/cf/index.cfm?command=loadGames';

		var myHTMLRequest = new Request.JSON({
			url: reqUrl,
			method: 'post',
			async: false,
			onSuccess : function(response) {
		    	ret = response.games;
		    }
		}).send();
		
		return ret;
	},


	startMatch: function(user_id, game_id, number_games, options) {
		var ret = false;
		var reqUrl = '/?match/insert/'+user_id+'/'+game_id+'/'+number_games+'/'+options;
		var myHTMLRequest = new Request.JSON({
			url: reqUrl,
			method: 'post',
			async: false,
			onSuccess : function(response) {
		    	ret = response.id;
		    }
		}).send();
		
		this.match_id = ret;
		return ret;
	},


	startGame: function(game_number) {
		var reqUrl = '/?game/insert/'+this.match_id+'/'+game_number;
		var myHTMLRequest = new Request.JSON({
			url: reqUrl,
			method: 'post',
			async: false,
			onSuccess : function(response) {
		    	ret = response.id;
		    }
		}).send();
		
		this.match_game_id = ret;
		return ret;
	},


	addUserToMatch: function(user_id, player_id) {
		var ret = false;
		var reqUrl = '/?user/addToMatch/'+this.match_id+'/'+user_id+'/'+player_id;
		var myHTMLRequest = new Request.JSON({
			url: reqUrl,
			method: 'post',
			async: false,
			onSuccess : function(response) {
			ret = response.success;
		    }
		}).send();
		
		return ret;
	},


	addHand: function(hand_id, user_id, points_start, is_cribbage) {
		var ret = 0;
		var reqUrl = '/?gamehand/insert/'+this.match_game_id+'/'+hand_id+'/'+user_id+'/'+points_start+'/'+is_cribbage;
		var myHTMLRequest = new Request.JSON({
			url: reqUrl,
			method: 'post',
			async: false,
			onSuccess : function(response) {
		    	ret = response.game_hand_id;
		    }
		}).send();
		
		return ret;
	},


	updateHandPoints: function(points_before_cut, points_after_cut, points_pegged, hand_id, user_id, is_cribbage) {
		var ret = false;
		var reqUrl = '/?gamehand/setHandPoints/'+this.match_game_id+'/'+ hand_id+'/'+user_id+'/'+is_cribbage+'/'+points_before_cut+'/'+points_after_cut+'/'+points_pegged;
		var myHTMLRequest = new Request.JSON({
			url: reqUrl,
			method: 'post',
			async: false,
			onSuccess : function(response) {
		    	ret = response.success;
		    }
		}).send();
		
		return ret;
	},


	updateCribPoints: function(points_start, points_before_cut, points_after_cut, points_pegged, hand_id, user_id, is_cribbage) {
		var ret = false;
		var reqUrl = '/?gamehand/setCribPoints/'+this.match_game_id+'/'+ hand_id+'/'+user_id+'/'+is_cribbage+'/'+points_start+'/'+points_before_cut+'/'+points_after_cut+'/'+points_pegged;
		var myHTMLRequest = new Request.JSON({
			url: reqUrl,
			method: 'post',
			async: false,
			onSuccess : function(response) {
		    	ret = response.success;
		    }
		}).send();
		
		return ret;
	},


	addHandCards: function(hand_id, user_id, cards) {
		var ret = false;
		var reqUrl = '/?handcard/addCards/'+this.match_game_id+'/'+hand_id+'/'+user_id+'/'+cards.toString().replace(/,/g, '~');
		var myHTMLRequest = new Request.JSON({
			url: reqUrl,
			method: 'post',
			async: false,
			onSuccess : function(response) {
		    	ret = response.success;
		    }
		}).send();
		
		return ret;
	},


	discardCard: function(hand_id, user_id, card_id) {
		var ret = false;
		var reqUrl = '/?handcard/discard/'+this.match_game_id+'/'+hand_id+'/'+user_id+'/'+card_id;
		var myHTMLRequest = new Request.JSON({
			url: reqUrl,
			method: 'post',
			async: false,
			onSuccess : function(response) {
		    	ret = response.success;
		    }
		}).send();
		
		return ret;
	},


	saveGameWinner: function(game_number, user_id, number_points) {
		var ret = false;
		var reqUrl = '/?game/setWinner/'+this.match_game_id+'/'+game_number+'/'+user_id+'/'+number_points;
		var myHTMLRequest = new Request.JSON({
			url: reqUrl,
			method: 'post',
			async: false,
			onSuccess : function(response) {
		    	ret = response.success;
		    }
		}).send();
		
		return ret;
	},
	
	
	saveMatchWinner: function(user_id) {
		var ret = false;
		var reqUrl = '/?match/setWinner/'+this.match_id+'/'+user_id;
		var myHTMLRequest = new Request.JSON({
			url: reqUrl,
			method: 'post',
			async: false,
			onSuccess : function(response) {
			ret = response.success;
		}
		}).send();
		
		return ret;
	},


	getGames: function() {
		var ret = false;
		var reqUrl = '/?games/list';
		var myHTMLRequest = new Request.JSON({
			url: reqUrl,
			method: 'post',
			async: false,
			onSuccess : function(response) {
		    	ret = response;
		    }
		}).send();
		
		return ret;
	},
	
	
	logPlayPoints: function(hand_Card_id, points, points_details, hand_id, user_id) {
		var ret = false;
		var reqUrl = '/?playlog/insert/'+hand_Card_id+'/'+points+'/'+this.match_game_id+'/'+hand_id+'/'+user_id+'/'+points_details;
		var myHTMLRequest = new Request.JSON({
			url: reqUrl,
			method: 'post',
			async: false,
			onSuccess : function(response) {
		    	ret = response.success;
		    }
		}).send();
		
		return ret;
	},
	

	
	
	getTopHands: function(user_id, match_id, game_number, order_by, order_way) {
		var ret = false;
		var reqUrl = '/?report/getTopHands/'+user_id+'/'+match_id+'/'+game_number+'/'+order_by+'/'+order_way;
		var myHTMLRequest = new Request.JSON({
			url: reqUrl,
			method: 'post',
			async: false,
			onSuccess : function(response) {
		    	ret = response;
		    }
		}).send();
		
		return ret;
	}
	
	
});


