var percentColors = [ { pct: 0.0, color: { r: 0xff, g: 0x00, b: 0 } }, { pct: 0.5, color: { r: 0xff, g: 0xff, b: 0 } }, { pct: 1.0, color: { r: 0x00, g: 0xff, b: 0 } } ]; var getColorForPercentage = function (pct) { for (var i = 0; i < percentColors.length; i++) { if (pct <= percentColors[i].pct) { var lower = percentColors[i - 1] || { pct: 0.1, color: { r: 0x0, g: 0x00, b: 0 } }; var upper = percentColors[i]; var range = upper.pct - lower.pct; var rangePct = (pct - lower.pct) / range; var pctLower = 1 - rangePct; var pctUpper = rangePct; var color = { r: Math.floor(lower.color.r * pctLower + upper.color.r * pctUpper), g: Math.floor(lower.color.g * pctLower + upper.color.g * pctUpper), b: Math.floor(lower.color.b * pctLower + upper.color.b * pctUpper) }; return 'rgb(' + [color.r, color.g, color.b].join(',') + ')'; } } } $(document).ready(function ($) { // set the first colors $('div.polls').find('span.option').each(function () { $(this).css({ backgroundColor: getColorForPercentage($(this).attr('title') / 100) }); }); // the on click event $("div.polls > form > p").click(function () { var loader = $('<img src="lib/loading.gif" />'); var poll = $(this).parents("div.polls"); var form = $(this).parents("form"); var poll_id = poll.attr("id"); if (form.hasClass("closed")) { return false; } var option_id = $(this).find('input').val(); $(":radio", form).hide(); $("em", $(this)).html(loader).show(); form.addClass("closed"); //send the poll id and the selected option id $.post('vote.php', { poll: poll_id, option: option_id }, function (data) { $("img", form).remove(); //set the new options Percentages $.each(data.results, function (option, value) { $("p#option_" + option).find("span").show().css({ width: 0, opacity: 0 }).animate({ width: value + "%", backgroundColor: getColorForPercentage(value / 100), opacity: 1 }, "slow", "swing", function () { $("p#option_" + option).find("em").text(value + "%").fadeIn("slow"); }) }); }, "json"); return false; }); });