function RoundRectButtonSetting(x, y, width, height, roundAmount) {
	this.x = x;
	this.y = y;
	this.width = width;
	this.height = height;
	this.roundAmount = 0;
	if(typeof roundAmount === "undefined") {
		var shorterSide = width > height ? height : width;
		this.roundAmount = shorterSide * 0.1;
	} else {
		this.roundAmount = roundAmount;
	}
	this.strokeWidthPx = RoundRectButtonSetting.DEFAULT_STROKE_WIDTH_PX;


	this.strokeColors = RoundRectButtonSetting.DEFAULT_STROKE_COLORS;
	this.buttonColors = RoundRectButtonSetting.DEFAULT_BUTTON_COLORS;
	this.textColors = RoundRectButtonSetting.DEFAULT_TEXT_COLORS;
	this.iconColors = RoundRectButtonSetting.DEFAULT_ICON_COLORS;
	this.fontStyle = RoundRectButtonSetting.DEFAULT_TEXT_FONT;
};

RoundRectButtonSetting.prototype.setStrokeColor = function(out, over, down, disabled) {
	this.strokeColors = { };
	this.strokeColors.out = out;
	this.strokeColors.over = over;
	this.strokeColors.down = down;
	this.strokeColors.disabled = disabled;
}

RoundRectButtonSetting.prototype.setButtonColor = function(out, over, down, disabled) {
	this.buttonColors = { };
	this.buttonColors.out = out;
	this.buttonColors.over = over;
	this.buttonColors.down = down;
	this.buttonColors.disabled = disabled;
}

RoundRectButtonSetting.prototype.setTextColor = function(out, over, down, disabled) {
	this.textColors = { };
	this.textColors.out = out;
	this.textColors.over = over;
	this.textColors.down = down;
	this.textColors.disabled = disabled;
}

RoundRectButtonSetting.prototype.setIconColor = function(out, over, down, disabled) {
	this.iconColors = { };
	this.iconColors.out = out;
	this.iconColors.over = over;
	this.iconColors.down = down;
	this.iconColors.disabled = disabled;
}


RoundRectButtonSetting.DEFAULT_STROKE_COLORS = {
	out: 0x666666,
	over: 0x333333,
	down: 0x333333,
	disabled: 0x666666
};

RoundRectButtonSetting.DEFAULT_BUTTON_COLORS = {
	out: 0xffffff,
	over: 0xddffdd,
	down: 0xaaffaa,
	disabled: 0x333333
};

RoundRectButtonSetting.DEFAULT_TEXT_COLORS = {
	out: "#000",
	over: "#333",
	down: "#666",
	disabled: "#999"
};

RoundRectButtonSetting.DEFAULT_ICON_COLORS = {
	out: 0xffffff,
	over: 0xddffdd,
	down: 0xaaffaa,
	disabled: 0x333333
};

RoundRectButtonSetting.DEFAULT_TEXT_FONT = {
	font: "30px Arial",
	boundsAlignH: "center",		// left, center. right
	boundsAlignV: "middle", 	// top, middle, bottom
	fill: "#fff",
	align: "center"
};

RoundRectButtonSetting.DEFAULT_TEXT_LINE_SPACING_PX = -10;	// in pixel
RoundRectButtonSetting.DEFAULT_STROKE_WIDTH_PX		= 5;	// in pixel




function RoundRectButton(roundRectSetting, iconName, buttonText, clickEvent) {
	this.setting = roundRectSetting;
	this.clickEvent = clickEvent;

	this.buttonStroke = this.makeButtonStroke();
	// this.buttonStroke.anchor.setTo(0.5, 0.5);
	this.buttonStroke.inputEnabled = true;
	this.setEventMethod(this.buttonStroke);

	this.button = this.makeButtonSprite();

	this.text = this.makeText(buttonText);
	if(buttonText.length > 0) {
		this.button.addChild(this.text);
	}

	if(iconName != null && iconName.length > 0) {
		this.icon = this.makeIcon(iconName);
		this.setIcon(this.icon);
	}

	this.shortcutText = this.makeShortcutText();
	this.button.addChild(this.shortcutText);

	// this.button.anchor.setTo(0.5, 0.5);
	this.button.inputEnabled = true;
	this.setEventMethod(this.button);

	this.mouseOut();
}

RoundRectButton.prototype.setEventMethod = function(target) {
	target.events.onInputOver.add(function() { this.mouseOver(); }, this);
	target.events.onInputOut.add(function() { this.mouseOut(); }, this);
	target.events.onInputDown.add(function() {
		this.mouseDown();

		if(this.clickEvent) {
			this.clickEvent();
		}
	}, this);
	target.events.onInputUp.add(function() { this.mouseOver(); }, this);
}

RoundRectButton.prototype.makeButtonStroke = function() {	// outter(bigger) round rect sprite
	var btnTexture = new Phaser.Graphics()
		.beginFill(0xffffff)
		.drawRoundedRect(0, 0, this.setting.width, this.setting.height, this.setting.roundAmount)
		.endFill()
		.generateTexture();

	return game.add.sprite(
		this.setting.x - this.setting.width / 2,
		this.setting.y - this.setting.height / 2,
		btnTexture
	);
}

RoundRectButton.prototype.makeButtonSprite = function() {	// inner(smaller) round rect sprite
	var width = this.setting.width - this.setting.strokeWidthPx * 2;
	var height = this.setting.height - this.setting.strokeWidthPx * 2;
	var innerRoundAmount = this.setting.roundAmount * (width / this.setting.width / 1.5);

	var btnTexture = new Phaser.Graphics()
		.beginFill(0xffffff)
		.drawRoundedRect(this.setting.strokeWidthPx, this.setting.strokeWidthPx, width, height, innerRoundAmount)
		.endFill()
		.generateTexture();

	// return game.add.sprite(0, 0, btnTexture);
	return game.add.sprite(
		this.setting.x - this.setting.width / 2 + this.setting.strokeWidthPx,
		this.setting.y - this.setting.height / 2 + this.setting.strokeWidthPx,
		btnTexture
	);
}

RoundRectButton.prototype.makeIcon = function(iconName) {
	var icon = game.add.sprite(0, 0, iconName);
	icon.width = 80;
	icon.height = 80;

	return icon;
}

RoundRectButton.prototype.makeText = function(textContent) {
	var width = this.setting.width / 2 - this.setting.strokeWidthPx;
	var height = this.setting.height / 2;

	// var btnText = game.add.text(0, 0, textContent, this.setting.fontStyle)
	// 	.setTextBounds(0, 0, width, this.setting.height);

	var btnText = game.add.text(width, height, textContent, this.setting.fontStyle);
	btnText.anchor.set(0.5);
	btnText.lineSpacing = RoundRectButtonSetting.DEFAULT_TEXT_LINE_SPACING_PX;

	return btnText;
}

RoundRectButton.prototype.setIcon = function(icon) {
	this.buttonIcon = this.button.addChild(icon);
	this.buttonIcon.x = this.button.width / 2;
	this.buttonIcon.y = this.button.height / 2;
	this.buttonIcon.anchor.setTo(0.5, 0.5);

	this.mouseOut();
}

RoundRectButton.prototype.makeShortcutText = function() {
	var shortcutText = game.add.text(this.button.width / 2, this.button.height * 9 / 10, "");
	shortcutText.anchor.set(0.5);

	shortcutText.fontSize = this.button.height * 2 / 10;
	// shortcutText.addColor(this.setting.textColors.over, 0);
	shortcutText.addColor("0xffffff", 0);

	return shortcutText;
}

RoundRectButton.prototype.addShortcutText = function(text) {
	var scText = "[ " + text + " ]";
	this.shortcutText.text = scText;

}


RoundRectButton.prototype.mouseOut = function() {
	this.text.fill = this.setting.textColors.out;
	if(this.shortcutText != undefined)
		this.shortcutText.fill = this.setting.textColors.over;
	this.buttonStroke.tint = this.setting.strokeColors.out;
	this.button.tint = this.setting.buttonColors.out;
	if(typeof this.buttonIcon !== "undefined") {
		this.buttonIcon.tint = this.setting.iconColors.out;
	}
}

RoundRectButton.prototype.mouseOver = function() {
	this.text.fill = this.setting.textColors.over;
	if(this.shortcutText != undefined)
		this.shortcutText.fill = this.setting.textColors.over;
	this.buttonStroke.tint = this.setting.strokeColors.over;
	this.button.tint = this.setting.buttonColors.over;
	if(typeof this.buttonIcon !== "undefined") {
		this.buttonIcon.tint = this.setting.iconColors.over;
	}
}

RoundRectButton.prototype.mouseDown = function() {
	this.text.fill = this.setting.textColors.down;
	if(this.shortcutText != undefined)
		this.shortcutText.fill = this.setting.textColors.over;
	this.buttonStroke.tint = this.setting.strokeColors.down;
	this.button.tint = this.setting.buttonColors.down;
	if(typeof this.buttonIcon !== "undefined") {
		this.buttonIcon.tint = this.setting.iconColors.down;
	}
}

RoundRectButton.prototype.buttonDisabled = function() {
	this.text.fill = this.setting.textColors.disabled;
	if(this.shortcutText != undefined)
		this.shortcutText.fill = this.setting.textColors.disabled;
	this.buttonStroke.tint = this.setting.strokeColors.disabled;
	this.button.tint = this.setting.buttonColors.disabled;
	if(typeof this.buttonIcon !== "undefined") {
		this.buttonIcon.tint = this.setting.iconColors.disabled;
	}
}



RoundRectButton.prototype.getPosX = function() {
	return this.buttonStroke.x + this.setting.width / 2;
}

RoundRectButton.prototype.getPosY = function() {
	return this.buttonStroke.y + y - this.setting.height / 2;
}

RoundRectButton.prototype.move = function(x, y) {
	this.buttonStroke.x = x - this.setting.width / 2;
	this.buttonStroke.y = y - this.setting.height / 2;

	this.button.x = x  - this.setting.width / 2 + this.setting.strokeWidthPx;
	this.button.y = y  - this.setting.height / 2 + this.setting.strokeWidthPx;
}

RoundRectButton.prototype.getInputEnabled = function() {
	return this.button.inputEnabled;
}

RoundRectButton.prototype.setInputEnabled = function(isEnabled) {
	this.buttonStroke.inputEnabled = isEnabled;
	this.button.inputEnabled = isEnabled;

	if(isEnabled === true) {
		this.mouseOut();
	} else {
		this.buttonDisabled();
	}
}

RoundRectButton.prototype.setLineSpacing = function(spacingInPixels) {
	this.text.lineSpacing = spacingInPixels;
}

RoundRectButton.NONE_ICON			= "";
RoundRectButton.NONE_BUTTON_TEXT	= "";