/// <reference path="jQuery.intellisense.js"/>
/// <reference path="xeko.js"/>
/// <reference path="messaging.js"/>

$(document).ready(function() 
{

	xeko.widgets.magicButton.loadValues();
	
	$("#magicbuttonButton").click(function(e)
	{
		e.preventDefault();
		this.blur();
		
		if (xeko.forceLogin(xeko.messaging.alert.MAGICBUTTON_LOGIN_REQUIRED))
		{
			$.ajax(
			{
				type: "GET",
				url: "/widgets/widget.MagicButton.handler.php?type=buttonclick&buttonguid=" + xeko.widgets.magicButton.id,
				beforeSend: function() {
					// display click success regardless of backend error
					if (xeko.widgets.magicButton.currentclicks < xeko.widgets.magicButton.goalclicks)
					{
						xeko.widgets.magicButton.currentclicks++;
						xeko.widgets.magicButton.alreadyClicked = true;
						xeko.widgets.magicButton.renderButton();
					}
				},
				complete: function()
				{},
				success: function(xml) {
					xeko.debug.trace(xml);
				},
				error: function(xmlHttpRequest, status, err)
				{
					// fail silently
				}
			});
		}
	});
	
});



xeko.widgets.magicButton = {
	"id" : "",
	"title" : "",
	"description" : "",
	"goalclicks" : 0,
	"currentclicks" : 0,
	"alreadyClicked" : false,
	"clickedSrc" : "",
	"loadValues" : function()
	{
		$.ajax(
		{
			type: "GET",
			url: "/widgets/widget.MagicButton.handler.php?type=getcurrentbutton",
			beforeSend: function() {  },
			complete: function() {  },
			success: function(xml) {
				if ($("magicbutton", xml).length > 0)
				{
					xeko.widgets.magicButton.id = $("magicbutton", xml).attr("id");
					xeko.widgets.magicButton.title = $("title", xml).text();
					xeko.widgets.magicButton.description = $("description", xml).text();
					xeko.widgets.magicButton.goalclicks = parseInt($("goalclicks", xml).text());
					xeko.widgets.magicButton.currentclicks = parseInt($("currentclicks", xml).text());
					xeko.widgets.magicButton.alreadyClicked = ($("iseligibletoclick", xml).text() == "0");
					
					xeko.widgets.magicButton.renderButton();
				}
				else
				{
					xeko.widgets.magicButton.hideError();
					xeko.widgets.magicButton.throwError(xeko.messaging.error.MAGICBUTTON_LOAD_ERROR);
				}
			},
			error: function(xmlHttpRequest, status, err)
			{
				if (xmlHttpRequest.status > 0) {
					xeko.widgets.magicButton.hideError();
					xeko.widgets.magicButton.throwError(xeko.messaging.error.MAGICBUTTON_LOAD_ERROR);
				}
			}
		});
	},
	"renderButton" : function()
	{
		// Current button src
		var imgType = (xeko.widgets.magicButton.alreadyClicked) ? "_depressed" : "";
		var curImg = new Image();
		
		// Is there a pre-loaded image to use?
		if (xeko.widgets.magicButton.clickedSrc.length > 0)
			curImg.src = xeko.widgets.magicButton.clickedSrc;
		else
			curImg.src = "/images/g/g_magicbutton_" + xeko.widgets.magicButton.getLevel() + imgType + ".png";
		
		// IE misbehaves when triggering a load event for PNGs
		if ($.browser.msie) xeko.widgets.magicButton.doRender(curImg.src);
		else {
			// Don't show the content until the (large) PNG button image is fully loaded
			$(curImg).load(function()
			{
				xeko.widgets.magicButton.doRender(curImg.src);
			});
		}
		
		// disable button if goalclicks have been reached, or if the current user has already clicked the button today
		if (xeko.widgets.magicButton.currentclicks >= xeko.widgets.magicButton.goalclicks || xeko.widgets.magicButton.alreadyClicked)
		{
			$("#magicbutton>input").hide();
		}
		
		// If button is currently clickable, pre-load the "thank-you" state of the button graphic
		if (!xeko.widgets.magicButton.alreadyClicked)
		{
			var img = new Image();
			img.src = "/images/g/g_magicbutton_" + xeko.widgets.magicButton.getLevel(true) + "_depressed.png";
			xeko.widgets.magicButton.clickedSrc = img.src;
		}
		
		// Show contextual help button
		$("#magicbutton>h3>a.contextualHelp").show();
	},
	"doRender" : function(src) {
		$("#magicbutton").css("background-image", "url(" + src + ")");
		$("#magicbutton>h3>span").text(xeko.widgets.magicButton.title);
		$("#magicbuttonCurrentClicks").text(xeko.widgets.magicButton.currentclicks);
		$("#magicbuttonGoalClicks").text(xeko.widgets.magicButton.goalclicks);
		$("#magicButtonHelp>p").prepend(xeko.widgets.magicButton.description + "<br /><br />");
		//$("#magicButtonHelp>p").html(xeko.widgets.magicButton.description + "<br /><br />" + $("#magicButtonHelp>p").html());
		$("div.magicbuttonText").show();
	},
	"getLevel" : function(getNext)
	{
		var next = getNext ? 1 : 0;
		// first level (0-1) is treated as "null" so that the full 100% graphic is not reached until the currentClicks fully reaches goalclicks
		var level = Math.floor(((xeko.widgets.magicButton.currentclicks + next) / xeko.widgets.magicButton.goalclicks) * 10);
		level = (level == 0) ? 1 : level;
		return level;
	},
	"throwError" : function(msg)
	{
		$("#magicbutton>div, #magicbutton>input").hide();
		$("#magicbutton>h3").text(msg);
	},
	"hideError" : function()
	{
	}
};