$(function() {
	var canvas = $("#c");
	var canvasHeight;
	var canvasWidth;
	var ctx;
	var dt = 0.1;
	
	var pointCollection;
	
	function init() {
		updateCanvasDimensions();
		
		var g = [
		
		new Point(7, 16, 0, 4, "#f7b62a"),new Point(7, 12, 0, 4, "#f7b62a"),new Point(7, 9, 0, 3, "#f7b62a"),new Point(9, 6, 0, 1, "#f7b62a"),new Point(8, 7, 0, 1, "#f7b62a"),new Point(7, 8, 0, 1, "#f7b62a"),new Point(8, 8, 0, 1, "#f7b62a"),new Point(8, 7, 0, 1, "#f7b62a"),new Point(9, 6, 0, 3, "#f7b62a"),new Point(10, 11, 0, 1, "#f7b62a"),new Point(10, 10, 0, 1, "#f7b62a"),new Point(10, 9, 0, 1, "#f7b62a"),new Point(11, 9, 0, 1, "#f7b62a"),new Point(10, 5, 0, 2, "#f7b62a"),new Point(12, 5, 0, 4, "#f7b62a"),new Point(16, 5, 0, 4, "#f7b62a"),new Point(20, 5, 0, 4, "#f7b62a"),new Point(24, 5, 0, 4, "#f7b62a"),new Point(23, 4, 0, 6, "#f7b62a"),new Point(24, 9, 0, 3, "#f7b62a"),new Point(22, 9, 0, 2, "#f7b62a"),new Point(21, 9, 0, 1, "#f7b62a"),new Point(27, 9, 0, 3, "#f7b62a"),new Point(30, 9, 0, 3, "#f7b62a"),new Point(33, 9, 0, 3, "#f7b62a"),new Point(36, 9, 0, 3, "#f7b62a"),new Point(39, 9, 0, 3, "#f7b62a"),new Point(42, 9, 0, 3, "#f7b62a"),new Point(45, 9, 0, 3, "#f7b62a"),new Point(47, 4, 0, 7, "#f7b62a"),new Point(48, 11, 0, 1, "#f7b62a"),new Point(49, 11, 0, 1, "#f7b62a"),new Point(50, 11, 0, 1, "#f7b62a"),new Point(51, 11, 0, 1, "#f7b62a"),new Point(52, 11, 0, 1, "#f7b62a"),new Point(53, 11, 0, 1, "#f7b62a"),new Point(54, 11, 0, 1, "#f7b62a"),new Point(55, 11, 0, 1, "#f7b62a"),new Point(53, 9, 0, 3, "#f7b62a"),new Point(56, 9, 0, 3, "#f7b62a"),new Point(59, 9, 0, 3, "#f7b62a"),new Point(62, 9, 0, 3, "#f7b62a"),new Point(65, 9, 0, 3, "#f7b62a"),new Point(68, 9, 0, 3, "#f7b62a"),new Point(71, 9, 0, 3, "#f7b62a"),new Point(74, 9, 0, 3, "#f7b62a"),new Point(74, 8, 0, 3, "#f7b62a"),new Point(75, 7, 0, 3, "#f7b62a"),new Point(77, 7, 0, 5, "#f7b62a"),new Point(82, 7, 0, 5, "#f7b62a"),new Point(87, 7, 0, 4, "#f7b62a"),new Point(91, 7, 0, 3, "#f7b62a"),new Point(94, 7, 0, 3, "#f7b62a"),new Point(97, 7, 0, 3, "#f7b62a"),new Point(100, 7, 0, 3, "#f7b62a"),new Point(103, 7, 0, 3, "#f7b62a"),new Point(106, 7, 0, 3, "#f7b62a"),new Point(109, 7, 0, 3, "#f7b62a"),new Point(112, 7, 0, 3, "#f7b62a"),new Point(111, 10, 0, 2, "#f7b62a"),new Point(112, 10, 0, 3, "#f7b62a"),new Point(115, 7, 0, 5, "#f7b62a"),new Point(120, 7, 0, 5, "#f7b62a"),new Point(125, 7, 0, 5, "#f7b62a"),new Point(130, 7, 0, 5, "#f7b62a"),new Point(135, 7, 0, 5, "#f7b62a"),new Point(135, 12, 0, 3, "#f7b62a"),new Point(135, 15, 0, 3, "#f7b62a"),new Point(138, 15, 0, 3, "#f7b62a"),new Point(141, 15, 0, 3, "#f7b62a"),new Point(144, 15, 0, 3, "#f7b62a"),new Point(140, 7, 0, 4, "#f7b62a"),new Point(144, 7, 0, 4, "#f7b62a"),new Point(148, 7, 0, 4, "#f7b62a"),new Point(152, 7, 0, 4, "#f7b62a"),new Point(156, 7, 0, 5, "#f7b62a"),new Point(161, 7, 0, 5, "#f7b62a"),new Point(166, 7, 0, 5, "#f7b62a"),new Point(171, 7, 0, 5, "#f7b62a"),new Point(176, 12, 0, 1, "#f7b62a"),new Point(177, 12, 0, 1, "#f7b62a"),new Point(178, 12, 0, 1, "#f7b62a"),new Point(179, 12, 0, 1, "#f7b62a"),new Point(178, 13, 0, 1, "#f7b62a"),new Point(179, 13, 0, 1, "#f7b62a"),new Point(184, 11, 0, 1, "#f7b62a"),new Point(183, 14, 0, 1, "#f7b62a"),new Point(188, 13, 0, 1, "#f7b62a"),new Point(176, 8, 0, 4, "#f7b62a"),new Point(180, 10, 0, 4, "#f7b62a"),new Point(184, 12, 0, 4, "#f7b62a"),new Point(188, 14, 0, 4, "#f7b62a"),new Point(192, 17, 0, 4, "#f7b62a"),new Point(196, 20, 0, 4, "#f7b62a"),new Point(199, 24, 0, 4, "#f7b62a"),new Point(194, 20, 0, 3, "#f7b62a"),new Point(194, 19, 0, 3, "#f7b62a"),new Point(188, 16, 0, 1, "#f7b62a"),new Point(187, 16, 0, 1, "#f7b62a"),new Point(88, 11, 0, 3, "#f7b62a"),new Point(191, 18, 0, 1, "#f7b62a"),new Point(190, 18, 0, 1, "#f7b62a"),new Point(194, 19, 0, 2, "#f7b62a"),new Point(193, 19, 0, 1, "#f7b62a"),new Point(192, 19, 0, 1, "#f7b62a"),new Point(195, 21, 0, 1, "#f7b62a"),new Point(195, 22, 0, 1, "#f7b62a"),new Point(192, 16, 0, 1, "#f7b62a"),new Point(197, 20, 0, 1, "#f7b62a"),new Point(200, 23, 0, 1, "#f7b62a"),new Point(198, 24, 0, 2, "#f7b62a"),new Point(197, 24, 0, 1, "#f7b62a"),new Point(200, 25, 0, 1, "#f7b62a"),new Point(202, 28, 0, 4, "#f7b62a"),new Point(203, 31, 0, 4, "#f7b62a"),new Point(201, 27, 0, 4, "#f7b62a"),new Point(200, 26, 0, 4, "#f7b62a"),new Point(203, 30, 0, 4, "#f7b62a"),new Point(204, 32, 0, 4, "#f7b62a"),new Point(204, 33, 0, 4, "#f7b62a"),new Point(204, 34, 0, 4, "#f7b62a"),new Point(205, 34, 0, 4, "#f7b62a"),new Point(205, 35, 0, 4, "#f7b62a"),new Point(206, 36, 0, 4, "#f7b62a"),new Point(206, 38, 0, 4, "#f7b62a"),new Point(206, 40, 0, 4, "#f7b62a"),new Point(206, 43, 0, 5, "#f7b62a"),new Point(207, 47, 0, 4, "#f7b62a"),new Point(207, 51, 0, 5, "#f7b62a"),new Point(207, 56, 0, 5, "#f7b62a"),new Point(207, 61, 0, 5, "#f7b62a"),new Point(207, 66, 0, 5, "#f7b62a"),new Point(207, 71, 0, 5, "#f7b62a"),new Point(207, 76, 0, 5, "#f7b62a"),new Point(207, 81, 0, 5, "#f7b62a"),new Point(207, 86, 0, 5, "#f7b62a"),new Point(207, 92, 0, 5, "#f7b62a"),new Point(207, 91, 0, 1, "#888"),new Point(208, 91, 0, 1, "#888"),new Point(209, 91, 0, 1, "#888"),new Point(210, 91, 0, 1, "#888"),new Point(211, 91, 0, 1, "#888"),new Point(207, 97, 0, 5, "#f7b62a"),new Point(207, 102, 0, 5, "#f7b62a"),new Point(207, 107, 0, 5, "#f7b62a"),new Point(207, 112, 0, 5, "#f7b62a"),new Point(207, 117, 0, 5, "#f7b62a"),new Point(207, 122, 0, 5, "#f7b62a"),new Point(207, 127, 0, 5, "#f7b62a"),new Point(207, 132, 0, 5, "#f7b62a"),new Point(207, 137, 0, 5, "#f7b62a"),new Point(207, 142, 0, 5, "#f7b62a"),new Point(207, 147, 0, 5, "#f7b62a"),new Point(207, 152, 0, 5, "#f7b62a"),new Point(207, 157, 0, 5, "#f7b62a"),new Point(207, 162, 0, 5, "#f7b62a"),new Point(207, 167, 0, 5, "#f7b62a"),new Point(213, 171, 0, 1, "#ff0808"),
		
		new Point(213, 169, 0, 2, "#ff0808"),new Point(213, 167, 0, 2, "#ff0808"),new Point(213, 165, 0, 2, "#ff0808"),new Point(213, 163, 0, 2, "#ff0808"),new Point(213, 161, 0, 2, "#ff0808"),new Point(213, 159, 0, 2, "#ff0808"),new Point(213, 157, 0, 2, "#ff0808"),new Point(213, 155, 0, 2, "#ff0808"),new Point(213, 153, 0, 2, "#ff0808"),new Point(213, 151, 0, 2, "#ff0808"),new Point(213, 149, 0, 2, "#ff0808"),new Point(213, 147, 0, 2, "#ff0808"),new Point(213, 145, 0, 2, "#ff0808"),new Point(213, 143, 0, 2, "#ff0808"),new Point(213, 141, 0, 2, "#ff0808"),new Point(213, 139, 0, 2, "#ff0808"),new Point(213, 137, 0, 2, "#ff0808"),new Point(213, 135, 0, 2, "#ff0808"),new Point(213, 133, 0, 2, "#ff0808"),new Point(213, 131, 0, 2, "#ff0808"),new Point(213, 129, 0, 2, "#ff0808"),new Point(213, 127, 0, 2, "#ff0808"),new Point(213, 125, 0, 2, "#ff0808"),new Point(213, 123, 0, 2, "#ff0808"),new Point(213, 121, 0, 2, "#ff0808"),new Point(213, 119, 0, 2, "#ff0808"),new Point(213, 117, 0, 2, "#ff0808"),new Point(213, 115, 0, 2, "#ff0808"),new Point(213, 113, 0, 2, "#ff0808"),new Point(213, 111, 0, 2, "#ff0808"),new Point(213, 109, 0, 2, "#ff0808"),new Point(213, 107, 0, 2, "#ff0808"),new Point(213, 105, 0, 2, "#ff0808"),new Point(213, 103, 0, 2, "#ff0808"),new Point(213, 101, 0, 2, "#ff0808"),new Point(213, 99, 0, 2, "#ff0808"),new Point(213, 97, 0, 2, "#ff0808"),new Point(213, 95, 0, 2, "#ff0808"),new Point(213, 94, 0, 1, "#ff0808"),new Point(213, 93, 0, 1, "#ff0808"),
		
		new Point(100, 5, 0, 1, "#ff0909"),new Point(101, 4, 0, 2, "#ff0909"),new Point(103, 4, 0, 2, "#ff0909"),new Point(105, 4, 0, 2, "#ff0909"),new Point(107, 4, 0, 2, "#ff0909"),new Point(109, 4, 0, 2, "#ff0909"),new Point(111, 4, 0, 2, "#ff0909"),new Point(113, 4, 0, 2, "#ff0909"),new Point(115, 4, 0, 2, "#ff0909"),new Point(117, 4, 0, 2, "#ff0909"),new Point(119, 4, 0, 2, "#ff0909"),new Point(121, 4, 0, 2, "#ff0909"),new Point(123, 4, 0, 2, "#ff0909"),new Point(125, 4, 0, 2, "#ff0909"),new Point(127, 4, 0, 2, "#ff0909"),new Point(129, 4, 0, 2, "#ff0909"),new Point(131, 4, 0, 2, "#ff0909"),new Point(133, 4, 0, 2, "#ff0909"),new Point(135, 4, 0, 2, "#ff0909"),new Point(137, 4, 0, 2, "#ff0909"),new Point(139, 4, 0, 2, "#ff0909"),new Point(141, 4, 0, 2, "#ff0909"),new Point(143, 4, 0, 2, "#ff0909"),new Point(145, 4, 0, 2, "#ff0909"),new Point(147, 4, 0, 2, "#ff0909"),new Point(149, 4, 0, 2, "#ff0909"),new Point(151, 4, 0, 2, "#ff0909"),new Point(153, 4, 0, 2, "#ff0909"),new Point(155, 4, 0, 2, "#ff0909"),new Point(157, 4, 0, 2, "#ff0909"),new Point(159, 5, 0, 1, "#ff0909"),
		
		new Point(3, 20, 0, 3, "#ff1010"),new Point(3, 23, 0, 3, "#ff1010"),new Point(3, 26, 0, 3, "#ff1010"),new Point(3, 29, 0, 3, "#ff1010"),new Point(3, 32, 0, 3, "#ff1010"),new Point(3, 35, 0, 3, "#ff1010"),new Point(3, 38, 0, 3, "#ff1010"),new Point(3, 41, 0, 3, "#ff1010"),new Point(3, 44, 0, 3, "#ff1010"),new Point(3, 47, 0, 3, "#ff1010"),new Point(3, 50, 0, 3, "#ff1010"),new Point(3, 53, 0, 3, "#ff1010"),new Point(3, 56, 0, 3, "#ff1010"),new Point(3, 59, 0, 3, "#ff1010"),new Point(3, 62, 0, 3, "#ff1010"),new Point(3, 65, 0, 3, "#ff1010"),new Point(3, 68, 0, 3, "#ff1010"),new Point(3, 71, 0, 3, "#ff1010"),new Point(3, 74, 0, 3, "#ff1010"),new Point(3, 77, 0, 3, "#ff1010"),new Point(3, 80, 0, 3, "#ff1010"),new Point(3, 83, 0, 3, "#ff1010"),new Point(3, 86, 0, 3, "#ff1010"),
		
		new Point(15, 182, 0, 1, "#f33"),new Point(15, 183, 0, 1, "#f33"),new Point(16, 181, 0, 3, "#f33"),new Point(19, 181, 0, 3, "#f33"),new Point(22, 181, 0, 3, "#f33"),new Point(25, 181, 0, 3, "#f33"),new Point(28, 181, 0, 3, "#f33"),new Point(31, 181, 0, 3, "#f33"),new Point(34, 181, 0, 3, "#f33"),new Point(37, 181, 0, 3, "#f33"),new Point(18, 181, 0, 3, "#f33"),new Point(21, 181, 0, 3, "#f33"),new Point(24, 181, 0, 3, "#f33"),new Point(27, 181, 0, 3, "#f33"),new Point(30, 181, 0, 3, "#f33"),new Point(33, 181, 0, 3, "#f33"),new Point(36, 181, 0, 3, "#f33"),
		
		new Point(34, 57, 0, 2, "#f6e522"),new Point(35, 57, 0, 2, "#f6e522"),new Point(36, 57, 0, 2, "#f6e522"),new Point(37, 57, 0, 2, "#f6e522"),new Point(38, 57, 0, 2, "#f6e522"),new Point(39, 57, 0, 2, "#f6e522"),new Point(40, 57, 0, 2, "#f6e522"),new Point(41, 57, 0, 2, "#f6e522"),new Point(42, 57, 0, 2, "#f6e522"),new Point(43, 57, 0, 2, "#f6e522"),new Point(44, 57, 0, 2, "#f6e522"),new Point(45, 57, 0, 2, "#f6e522"),new Point(46, 57, 0, 2, "#f6e522"),new Point(47, 57, 0, 2, "#f6e522"),new Point(48, 57, 0, 2, "#f6e522"),new Point(49, 57, 0, 2, "#f6e522"),new Point(50, 57, 0, 2, "#f6e522"),new Point(51, 57, 0, 2, "#f6e522"),new Point(52, 57, 0, 2, "#f6e522"),
		
		new Point(38, 174, 0, 2, "#a964bf"),new Point(38, 175, 0, 2, "#a964bf"),new Point(38, 176, 0, 2, "#a964bf"),new Point(31, 173, 0, 3, "#a964bf"),new Point(32, 173, 0, 3, "#a964bf"),new Point(31, 133, 0, 4, "#a964bf"),new Point(33, 133, 0, 4, "#a964bf"),new Point(34, 133, 0, 4, "#a964bf"),new Point(37, 134, 0, 2, "#a964bf"),new Point(30, 134, 0, 2, "#a964bf"),new Point(32, 90, 0, 2, "#a964bf"),new Point(33, 90, 0, 2, "#a964bf"),new Point(33, 91, 0, 2, "#a964bf"),new Point(34, 90, 0, 2, "#a964bf"),new Point(32, 86, 0, 2, "#a964bf"),new Point(33, 86, 0, 2, "#a964bf"),new Point(34, 86, 0, 2, "#a964bf"),new Point(25, 86, 0, 2, "#a964bf"),new Point(24, 86, 0, 2, "#a964bf"),new Point(26, 86, 0, 2, "#a964bf"),
		new Point(26, 86, 0, 2, "#a964bf"),
		
		new Point(285, 12, 0, 4, "#f12"),new Point(263, 12, 0, 4, "#f12"),new Point(259, 12, 0, 4, "#f12"),new Point(259, 16, 0, 4, "#f12"),new Point(259, 20, 0, 4, "#f12"),new Point(259, 24, 0, 4, "#f12"),new Point(259, 28, 0, 4, "#f12"),new Point(259, 45, 0, 4, "#f12"),new Point(259, 48, 0, 4, "#f12"),new Point(259, 52, 0, 4, "#f12"),new Point(259, 64, 0, 3, "#f12"),new Point(259, 65, 0, 3, "#f12"),new Point(259, 68, 0, 3, "#f12"),new Point(259, 71, 0, 3, "#f12"),new Point(259, 74, 0, 3, "#f12"),new Point(259, 77, 0, 3, "#f12"),new Point(259, 80, 0, 3, "#f12"),new Point(259, 83, 0, 3, "#f12"),new Point(259, 86, 0, 3, "#f12"),new Point(259, 89, 0, 3, "#f12"),new Point(259, 92, 0, 3, "#f12"),new Point(259, 95, 0, 3, "#f12"),new Point(259, 98, 0, 3, "#f12"),new Point(259, 101, 0, 3, "#f12"),new Point(259, 104, 0, 3, "#f12"),new Point(259, 107, 0, 3, "#f12"),new Point(259, 110, 0, 3, "#f12"),new Point(259, 113, 0, 3, "#f12"),new Point(259, 116, 0, 3, "#f12"),new Point(259, 119, 0, 3, "#f12"),new Point(259, 122, 0, 3, "#f12"),new Point(259, 125, 0, 3, "#f12"),new Point(259, 128, 0, 3, "#f12"),new Point(259, 131, 0, 3, "#f12"),new Point(259, 134, 0, 3, "#f12"),new Point(259, 137, 0, 3, "#f12"),
		new Point(256, 58, 0, 3, "#f7b62c"),new Point(256, 61, 0, 3, "#f7b62c"),new Point(256, 64, 0, 3, "#f7b62c"),new Point(256, 62, 0, 3, "#f7b62c"),new Point(256, 59, 0, 3, "#f7b62c"),new Point(256, 58, 0, 3, "#f7b62c"),new Point(259, 58, 0,4, "#f7b62c"),new Point(262, 58, 0, 3, "#f7b62c"),new Point(265, 58, 0, 3, "#f7b62c"),new Point(267, 58, 0, 5, "#f7b62c"),new Point(267, 63, 0, 5, "#f7b62c"),new Point(267, 60, 0, 5, "#f7b62c"),new Point(267, 134, 0, 5, "#f7b62c"),new Point(267, 139, 0, 5, "#f7b62c"),new Point(267, 136, 0, 5, "#f7b62c"),new Point(264, 141, 0, 4, "#f7b62c"),new Point(260, 141, 0, 4, "#f7b62c"),new Point(256, 141, 0, 4, "#f7b62c"),new Point(256, 139, 0, 2, "#f7b62c"),new Point(256, 137, 0, 2, "#f7b62c"),new Point(256, 136, 0, 2, "#f7b62c"),
		new Point(295, 11, 0, 4, "#f34"),new Point(295, 15, 0, 4, "#f34"),new Point(295, 19, 0, 4, "#f34"),new Point(295, 20, 0, 4, "#f34"),new Point(293, 21, 0, 3, "#f34"),new Point(291, 21, 0, 3, "#f34"),new Point(289, 21, 0, 3, "#f34"),new Point(288, 22, 0, 2, "#f34"),new Point(287, 23, 0, 3, "#f34"),new Point(287, 23, 0, 3, "#f34"),new Point(287, 25, 0, 3, "#f34"),new Point(287, 27, 0, 3, "#f34"),
		new Point(118, 106, 0, 4, "#f35"),new Point(118, 109, 0, 4, "#f35"),new Point(118, 112, 0, 4, "#f35"),new Point(118, 115, 0, 4, "#f35"),new Point(118, 118, 0, 4, "#f35"),new Point(118, 121, 0, 4, "#f35"),new Point(118, 124, 0, 4, "#f35"),new Point(118, 127, 0, 4, "#f35"),new Point(118, 130, 0, 4, "#f35"),new Point(118, 133, 0, 4, "#f35"),new Point(118, 136, 0, 4, "#f35"),
		
		new Point(291, 173, 0, 3, "#f12"),new Point(294, 172, 0, 3, "#f12"),new Point(296, 171, 0, 2, "#f12"),new Point(297, 170, 0, 2, "#f12"),new Point(297, 169, 0, 2, "#f12"),new Point(298, 169, 0, 2, "#f12"),new Point(298, 167, 0, 2, "#f12"),new Point(298, 165, 0, 2, "#f12"),
		new Point(297, 175, 0, 1, "#f34d29"),new Point(296, 176, 0, 2, "#f34d29"),new Point(296, 178, 0, 2, "#f34d29"),new Point(296, 180, 0, 2, "#f34d29"),new Point(296, 179, 0, 2, "#f34d29"),new Point(296, 177, 0, 2, "#f34d29"),new Point(296, 181, 0, 2, "#f34d29"),new Point(296, 183, 0, 2, "#f34d29"),new Point(296, 182, 0, 2, "#f34d29"),new Point(295, 183, 0, 3, "#f34d29"),new Point(294, 184, 0, 2, "#f34d29"),new Point(292, 184, 0, 2, "#f34d29"),new Point(290, 184, 0, 2, "#f34d29"),new Point(288, 184, 0, 2, "#f34d29"),new Point(286, 184, 0, 2, "#f34d29"),new Point(284, 184, 0, 2, "#f34d29"),new Point(282, 184, 0, 2, "#f34d29"),new Point(280, 184, 0, 2, "#f34d29"),new Point(279, 185, 0, 1, "#f34d29"),
		
		new Point(10, 97, 0, 3, "#f13"),new Point(10, 100, 0, 3, "#f13"),new Point(10, 103, 0, 3, "#f13"),new Point(10, 106, 0, 3, "#f13"),new Point(10, 109, 0, 3, "#f13"),new Point(10, 112, 0, 3, "#f13"),new Point(10, 119, 0, 3, "#f13"),new Point(10, 122, 0, 3, "#f13"),new Point(10, 125, 0, 3, "#f13"),new Point(10, 128, 0, 3, "#f13"),new Point(10, 131, 0, 3, "#f13"),new Point(10, 134, 0, 3, "#f13"),
		
		new Point(44, 80, 0, 2, "#f13"),new Point(44, 82, 0, 2, "#f13"),new Point(44, 84, 0, 2, "#f13"),new Point(44, 86, 0, 2, "#f13"),new Point(44, 88, 0, 2, "#f13"),new Point(44, 90, 0, 2, "#f13"),new Point(44, 92, 0, 2, "#f13"),new Point(44, 94, 0, 2, "#f13"),new Point(44, 96, 0, 2, "#f13"),new Point(44, 98, 0, 2, "#f13"),new Point(44, 123, 0, 2, "#f13"),new Point(45, 122, 0, 1, "#f13"),new Point(44, 125, 0, 2, "#f13"),new Point(44, 127, 0, 2, "#f13"),new Point(44, 129, 0, 2, "#f13"),new Point(44, 131, 0, 2, "#f13"),new Point(44, 133, 0, 2, "#f13"),new Point(44, 135, 0, 2, "#f13"),new Point(44, 137, 0, 2, "#f13"),new Point(44, 139, 0, 2, "#f13"),new Point(44, 141, 0, 2, "#f13"),new Point(44, 143, 0, 2, "#f13"),new Point(44, 145, 0, 2, "#f13"),new Point(44, 147, 0, 2, "#f13"),new Point(44, 149, 0, 2, "#f13"),new Point(44, 151, 0, 2, "#f13"),new Point(44, 153, 0, 2, "#f13"),new Point(44, 155, 0, 2, "#f13"),new Point(44, 157, 0, 2, "#f13"),new Point(44, 159, 0, 2, "#f13"),new Point(44, 161, 0, 2, "#f13"),
		
		new Point(62, 42, 0, 4, "#f22"),new Point(65, 41, 0, 2, "#f22"),new Point(64, 42, 0, 2, "#f22"),new Point(66, 42, 0, 2, "#f22"),new Point(67, 40, 0, 3, "#f22"),new Point(69, 40, 0, 3, "#f22"),new Point(75, 40, 0, 3, "#f22"),new Point(72, 40, 0, 3, "#f22"),new Point(70, 40, 0, 3, "#f22"),new Point(73, 40, 0, 3, "#f22"),new Point(76, 40, 0, 3, "#f22"),new Point(79, 40, 0, 3, "#f22"),new Point(82, 40, 0, 3, "#f22"),new Point(85, 40, 0, 3, "#f22"),new Point(88, 40, 0, 3, "#f22"),new Point(91, 40, 0, 3, "#f22"),new Point(94, 40, 0, 3, "#f22"),new Point(78, 40, 0, 3, "#f22"),new Point(80, 40, 0, 3, "#f22"),new Point(83, 40, 0, 3, "#f22"),new Point(86, 40, 0, 3, "#f22"),new Point(89, 40, 0, 3, "#f22"),new Point(92, 40, 0, 3, "#f22"),new Point(95, 43, 0, 3, "#f22"),new Point(95, 40, 0, 3, "#f22"),new Point(98, 42, 0, 3, "#f22"),new Point(97, 41, 0, 3, "#f22"),new Point(96, 41, 0, 5, "#f22"),new Point(101, 42, 0, 2, "#f22"),new Point(100, 42, 0, 2, "#f22"),
		
		new Point(80, 100, 0, 3, "#f23"),new Point(80, 103, 0, 3, "#f23"),new Point(80, 106, 0, 3, "#f23"),new Point(80, 109, 0, 3, "#f23"),new Point(80, 112, 0, 3, "#f23"),new Point(80, 115, 0, 3, "#f23"),new Point(80, 118, 0, 3, "#f23"),
		
		new Point(30, 5, 0, 3, "#f34d21"),new Point(33, 5, 0, 3, "#f34d21"),new Point(36, 5, 0, 3, "#f34d21"),new Point(39, 5, 0, 3, "#f34d21"),new Point(42, 5, 0, 3, "#f34d21"),new Point(45, 5, 0, 3, "#f34d21"),
		
		new Point(134, 26, 0, 2, "#228bf6"),new Point(133, 27, 0, 2, "#228bf6"),new Point(133, 29, 0, 1, "#228bf6"),new Point(133, 29, 0, 2, "#228bf6"),new Point(133, 30, 0, 1, "#228bf6"),new Point(133, 31, 0, 1, "#228bf6"),new Point(133, 32, 0, 1, "#228bf6"),new Point(133, 33, 0, 1, "#228bf6"),new Point(133, 34, 0, 1, "#228bf6"),new Point(133, 35, 0, 1, "#228bf6"),new Point(133, 36, 0, 1, "#228bf6"),new Point(133, 37, 0, 1, "#228bf6"),new Point(133, 38, 0, 1, "#228bf6"),new Point(133, 39, 0, 1, "#228bf6"),new Point(133, 40, 0, 1, "#228bf6"),new Point(133, 41, 0, 1, "#228bf6"),new Point(134, 40, 0, 1, "#228bf6"),new Point(134, 41, 0, 2, "#228bf6"),new Point(135, 42, 0, 2, "#228bf6"),new Point(137, 43, 0, 1, "#228bf6"),new Point(138, 43, 0, 1, "#228bf6"),new Point(139, 43, 0, 1, "#228bf6"),new Point(140, 43, 0, 1, "#228bf6"),new Point(141, 43, 0, 1, "#228bf6"),new Point(142, 43, 0, 1, "#228bf6"),new Point(143, 43, 0, 1, "#228bf6"),new Point(144, 43, 0, 1, "#228bf6"),new Point(145, 43, 0, 1, "#228bf6"),new Point(146, 43, 0, 1, "#228bf6"),new Point(147, 43, 0, 1, "#228bf6"),new Point(148, 43, 0, 1, "#228bf6"),new Point(149, 43, 0, 1, "#228bf6"),new Point(150, 43, 0, 1, "#228bf6"),new Point(151, 42, 0, 2, "#228bf6"),new Point(152, 41, 0, 2, "#228bf6"),new Point(153, 39, 0, 1, "#228bf6"),new Point(153, 40, 0, 1, "#228bf6"),new Point(153, 38, 0, 1, "#228bf6"),new Point(153, 37, 0, 1, "#228bf6"),new Point(153, 36, 0, 1, "#228bf6"),new Point(153, 35, 0, 1, "#228bf6"),new Point(153, 34, 0, 1, "#228bf6"),new Point(153, 33, 0, 1, "#228bf6"),new Point(153, 32, 0, 1, "#228bf6"),new Point(153, 31, 0, 1, "#228bf6"),new Point(153, 30, 0, 1, "#228bf6"),new Point(153, 29, 0, 1, "#228bf6"),new Point(152, 27, 0, 2, "#228bf6"),new Point(151, 26, 0, 2, "#228bf6"),new Point(150, 25, 0, 2, "#228bf6"),new Point(150, 25, 0, 1, "#228bf6"),new Point(149, 25, 0, 1, "#228bf6"),new Point(148, 25, 0, 1, "#228bf6"),new Point(147, 25, 0, 1, "#228bf6"),new Point(146, 25, 0, 1, "#228bf6"),new Point(145, 25, 0, 1, "#228bf6"),new Point(144, 25, 0, 1, "#228bf6"),new Point(143, 25, 0, 1, "#228bf6"),new Point(142, 25, 0, 1, "#228bf6"),new Point(141, 25, 0, 1, "#228bf6"),new Point(140, 25, 0, 1, "#228bf6"),new Point(139, 25, 0, 1, "#228bf6"),new Point(138, 25, 0, 1, "#228bf6"),new Point(136, 25, 0, 2, "#228bf6"),
		
		new Point(111, 108, 0, 3, "#7554c9"),new Point(110, 108, 0, 3, "#7554c9"),new Point(110, 110, 0, 3, "#7554c9"),new Point(110, 112, 0, 3, "#7554c9"),new Point(110, 114, 0, 3, "#7554c9"),new Point(110, 116, 0, 3, "#7554c9"),new Point(110, 118, 0, 3, "#7554c9"),new Point(110, 120, 0, 3, "#7554c9"),new Point(110, 122, 0, 3, "#7554c9"),new Point(110, 124, 0, 3, "#7554c9"),new Point(110, 126, 0, 3, "#7554c9"),new Point(110, 128, 0, 3, "#7554c9"),new Point(110, 130, 0, 3, "#7554c9"),new Point(110, 132, 0, 3, "#7554c9"),new Point(110, 134, 0, 3, "#7554c9"),
		new Point(104, 128, 0, 4, "#7554c9"),new Point(104, 131, 0, 4, "#7554c9"),new Point(104, 134, 0, 4, "#7554c9"),new Point(104, 137, 0, 4, "#7554c9"),
		new Point(190, 56, 0, 4, "#7554c9"),new Point(190, 59, 0, 4, "#7554c9"),new Point(190, 62, 0, 4, "#7554c9"),new Point(190, 65, 0, 4, "#7554c9"),new Point(190, 68, 0, 4, "#7554c9"),new Point(190, 71, 0, 4, "#7554c9"),
		new Point(190, 108, 0, 4, "#7554c9"),new Point(190, 111, 0, 4, "#7554c9"),new Point(190, 114, 0, 4, "#7554c9"),new Point(190, 117, 0, 4, "#7554c9"),new Point(190, 120, 0, 4, "#7554c9"),
		
		new Point(16, 54, 0, 3, "#777"),new Point(16, 53, 0, 3, "#777"),new Point(16, 52, 0, 3, "#777"),new Point(16, 51, 0, 3, "#777"),new Point(16, 49, 0, 3, "#777"),new Point(16, 48, 0, 3, "#777"),new Point(15, 51, 0, 3, "#777"),new Point(14, 51, 0, 3, "#777"),new Point(13, 51, 0, 3, "#777"),new Point(12, 51, 0, 3, "#777"),new Point(17, 51, 0, 3, "#777"),new Point(18, 51, 0, 3, "#777"),new Point(19, 51, 0, 3, "#777"),new Point(20, 51, 0, 3, "#777"),
		new Point(286, 174, 0, 2, "#777"),new Point(286, 175, 0, 2, "#777"),new Point(286, 174, 0, 2, "#777"),new Point(286, 173, 0, 2, "#777"),new Point(286, 172, 0, 2, "#777"),new Point(286, 171, 0, 2, "#777"),new Point(285, 173, 0, 2, "#777"),new Point(284, 173, 0, 2, "#777"),new Point(287, 173, 0, 2, "#777"),new Point(288, 173, 0, 2, "#777"),
		new Point(197, 167, 0, 2, "#777"),new Point(197, 168, 0, 2, "#777"),new Point(197, 169, 0, 2, "#777"),new Point(197, 170, 0, 2, "#777"),new Point(197, 171, 0, 2, "#777"),new Point(197, 172, 0, 2, "#777"),new Point(197, 173, 0, 2, "#777"),new Point(197, 174, 0, 2, "#777"),new Point(196, 171, 0, 2, "#777"),new Point(195, 171, 0, 2, "#777"),new Point(194, 171, 0, 2, "#777"),new Point(200, 171, 0, 2, "#777"),new Point(198, 171, 0, 2, "#777"),new Point(199, 171, 0, 2, "#777"),
		
		];
		
		gLength = g.length;
		for (var i = 0; i < gLength; i++) {
			g[i].curPos.x = (canvasWidth/2 - 152) + g[i].curPos.x;
			g[i].curPos.y = (canvasHeight/2 - 96) + g[i].curPos.y;
			
			g[i].originalPos.x = (canvasWidth/2 - 152) + g[i].originalPos.x;
			g[i].originalPos.y = (canvasHeight/2 - 96) + g[i].originalPos.y;
		};
		
		pointCollection = new PointCollection();
		pointCollection.points = g;
		
		initEventListeners();
		timeout();
	};
	
	function initEventListeners() {
		$(window).bind('resize', updateCanvasDimensions).bind('mousemove', onMove);
		
		canvas.get(0).ontouchmove = function(e) {
			e.preventDefault();
			onTouchMove(e);
		};
		
		canvas.get(0).ontouchstart = function(e) {
			e.preventDefault();
		};
	};
	
	function updateCanvasDimensions() {
		canvas.attr({height: $(window).height(), width: $(window).width()});
		canvasWidth = canvas.width();
		canvasHeight = canvas.height();

		draw();
	};
	
	function onMove(e) {
		if (pointCollection)
			pointCollection.mousePos.set(e.pageX, e.pageY);
	};
	
	function onTouchMove(e) {
		if (pointCollection)
			pointCollection.mousePos.set(e.targetTouches[0].pageX, e.targetTouches[0].pageY);
	};
	
	function timeout() {
		draw();
		update();
		
		setTimeout(function() { timeout() }, 30);
	};
	
	function draw() {
		var tmpCanvas = canvas.get(0);

		if (tmpCanvas.getContext == null) {
			return; 
		};
		
		ctx = tmpCanvas.getContext('2d');
		ctx.clearRect(0, 0, canvasWidth, canvasHeight);
		
		if (pointCollection)
			pointCollection.draw();
	};
	
	function update() {		
		if (pointCollection)
			pointCollection.update();
	};
	
	function Vector(x, y, z) {
		this.x = x;
		this.y = y;
		this.z = z;
 
		this.addX = function(x) {
			this.x += x;
		};
		
		this.addY = function(y) {
			this.y += y;
		};
		
		this.addZ = function(z) {
			this.z += z;
		};
 
		this.set = function(x, y, z) {
			this.x = x; 
			this.y = y;
			this.z = z;
		};
	};
	
	function PointCollection() {
		this.mousePos = new Vector(0, 0);
		this.points = new Array();
		
		this.newPoint = function(x, y, z) {
			var point = new Point(x, y, z);
			this.points.push(point);
			return point;
		};
		
		this.update = function() {		
			var pointsLength = this.points.length;
			
			for (var i = 0; i < pointsLength; i++) {
				var point = this.points[i];
				
				if (point == null)
					continue;
				
				var dx = this.mousePos.x - point.curPos.x;
				var dy = this.mousePos.y - point.curPos.y;
				var dd = (dx * dx) + (dy * dy);
				var d = Math.sqrt(dd);
				
				if (d < 200) {
					point.targetPos.x = (this.mousePos.x < point.curPos.x) ? point.curPos.x - dx : point.curPos.x - dx;
					point.targetPos.y = (this.mousePos.y < point.curPos.y) ? point.curPos.y - dy : point.curPos.y - dy;
				} else {
					point.targetPos.x = point.originalPos.x;
					point.targetPos.y = point.originalPos.y;
				};
				
				point.update();
			};
		};
		
		this.draw = function() {
			var pointsLength = this.points.length;
			for (var i = 0; i < pointsLength; i++) {
				var point = this.points[i];
				
				if (point == null)
					continue;

				point.draw();
			};
		};
	};
	
	function Point(x, y, z, size, colour) {
		this.colour = colour;
		this.curPos = new Vector(x, y, z);
		this.friction = 0.8;
		this.originalPos = new Vector(x, y, z);
		this.radius = size;
		this.size = size;
		this.springStrength = 0.1;
		this.targetPos = new Vector(x, y, z);
		this.velocity = new Vector(0.0, 0.0, 0.0);
		
		this.update = function() {
			var dx = this.targetPos.x - this.curPos.x;
			var ax = dx * this.springStrength;
			this.velocity.x += ax;
			this.velocity.x *= this.friction;
			this.curPos.x += this.velocity.x;
			
			var dy = this.targetPos.y - this.curPos.y;
			var ay = dy * this.springStrength;
			this.velocity.y += ay;
			this.velocity.y *= this.friction;
			this.curPos.y += this.velocity.y;
			
			var dox = this.originalPos.x - this.curPos.x;
			var doy = this.originalPos.y - this.curPos.y;
			var dd = (dox * dox) + (doy * doy);
			var d = Math.sqrt(dd);
			
			this.targetPos.z = d/100 + 1;
			var dz = this.targetPos.z - this.curPos.z;
			var az = dz * this.springStrength;
			this.velocity.z += az;
			this.velocity.z *= this.friction;
			this.curPos.z += this.velocity.z;
			
			this.radius = this.size*this.curPos.z;
			if (this.radius < 1) this.radius = 1;
		};
		
		this.draw = function() {
			ctx.fillStyle = this.colour;
			ctx.beginPath();
			ctx.fillRect(this.curPos.x, this.curPos.y, this.radius, this.radius);
			ctx.fill();
		};
	};
	
	init();
});
