Some more tweaking.
1 var QUOTES_NUMBER = 39;
3 var SERVER = "http://" + window.location.hostname + ":" + port;
5 $(document).ready(function() {
6 var image = new Image();
7 image.onload = init_logo;
8 image.src = "images/logobase.png";
9 $("#logo").click(handle_click);
10 $("#logo").hover(function() {
11 $(this).css("cursor", "pointer");
13 $(this).css("cursor", "auto");
17 $(document).keypress( function(event) {
18 if (event.which == 13) {
19 event.preventDefault();
25 var menu_height = 120;
27 var click_events = new Array();
28 click_events["logo"] = new Array();
29 click_events["logo"][0] = new Object();
30 click_events["logo"][0]["min_x"] = 0;
31 click_events["logo"][0]["max_x"] = Math.round(menu_width/4);
32 click_events["logo"][0]["min_y"] = 0;
33 click_events["logo"][0]["max_y"] = menu_height;
34 click_events["logo"][0]["func"] = switch_page;
35 click_events["logo"][0]["args"] = new Array("personalwork.html");
36 click_events["logo"][1] = new Object();
37 click_events["logo"][1]["min_x"] = Math.round(menu_width/4) + 1;
38 click_events["logo"][1]["max_x"] = Math.round(menu_width/2);
39 click_events["logo"][1]["min_y"] = 0;
40 click_events["logo"][1]["max_y"] = menu_height;
41 click_events["logo"][1]["func"] = switch_page;
42 click_events["logo"][1]["args"] = new Array("howiwork.html");
43 click_events["logo"][2] = new Object();
44 click_events["logo"][2]["min_x"] = Math.round(menu_width/2) + 1;
45 click_events["logo"][2]["max_x"] = Math.round(menu_width/4*3);
46 click_events["logo"][2]["min_y"] = 0;
47 click_events["logo"][2]["max_y"] = menu_height;
48 click_events["logo"][2]["func"] = switch_page;
49 click_events["logo"][2]["args"] = new Array("books.html");
50 click_events["logo"][3] = new Object();
51 click_events["logo"][3]["min_x"] = Math.round(menu_width/4*3) + 1;
52 click_events["logo"][3]["max_x"] = menu_width - 1;
53 click_events["logo"][3]["min_y"] = 0;
54 click_events["logo"][3]["max_y"] = menu_height;
55 click_events["logo"][3]["func"] = switch_page;
56 click_events["logo"][3]["args"] = new Array("links.html", "linksend.html");
58 function handle_click(e) {
59 var offset = $("#logo").offset();
60 var x = e.pageX - offset.left;
61 var y = e.pageY - offset.top;
62 for (var i in click_events[e.target.id]) {
63 var ces = click_events[e.target.id][i];
64 if (ces && x >= ces["min_x"] && x <= ces["max_x"]
65 && y >= ces["min_y"] && y <= ces["max_y"]) {
66 ces["func"](e.target.id, ces);
72 function switch_page(id, params) {
73 var page = params["args"][0];
75 document.location.href = page;
78 function color_area(id, min_x, max_x, min_y, max_y, colour) {
79 var canvas = document.getElementById(id);
80 var context = canvas.getContext("2d");
81 var image = context.getImageData(0, 0, menu_width, menu_height);
82 var pixels = image.data;
83 for (var y = min_y; y <= max_y; y += 1) {
84 for (var x = min_x; x <= max_x; x += 1) {
85 var pix_colour = getPixel(image, x, y);
86 if (pix_colour.a > 0) {
87 colour.a = pix_colour.a;
88 setPixel(image, x, y, colour);
92 context.putImageData(image, 0, 0);
95 function init_logo(event) {
96 var canvas = document.getElementById("logo");
97 var context = canvas.getContext("2d");
98 var image = context.getImageData(0, 0, menu_width, menu_height);
99 canvas.width = menu_width;
100 canvas.height = menu_height;
101 context.drawImage(event.target, 0, 0);
102 var white = new Colour(255, 255, 255);
103 for (var i in click_events["logo"]) {
104 var p = click_events["logo"][i];
105 var pos = document.location.href.lastIndexOf("/") + 1;
106 var page = document.location.href.substr(pos);
108 for (var j in p["args"]) {
109 if (page == p["args"][j]) {
110 color_area("logo", p["min_x"], p["max_x"], 70, p["max_y"], white);
116 color_area("logo", p["min_x"], p["max_x"], 0, 70, white);
121 function update_logo() {
122 var canvas = document.getElementById("logo");
123 var context = canvas.getContext("2d");
124 var image = context.getImageData(0, 0, menu_width, menu_height);
125 var pixels = image.data;
126 var white = new Colour(255, 255, 255);
127 for (var y = 0; y < menu_height; y += 1) {
128 for (var x = 0; x < menu_width; x += 1) {
129 var pix_colour = getPixel(image, x, y);
130 if (pix_colour.a > 0) {
131 setPixel(image, x, y, new Colour(90, 215, 21, pix_colour.a));
135 context.putImageData(image, 0, 0);
138 function Colour(r, g, b, a) {
142 this.a = a == undefined ? 255 : a;
144 Colour.prototype.equals = function(rhs) {
146 if (typeof(rhs[p]) == undefined
147 || this[p] != rhs[p]) {
154 function setPixel(image, x, y, color) {
155 var index = 4 * (x + y * image.width);
156 image.data[index] = color.r;
157 image.data[index + 1] = color.g;
158 image.data[index + 2] = color.b;
159 image.data[index + 3] = color.a;
162 function getPixel(image, x, y) {
163 var index = 4 * (x + y * image.width);
164 var r = image.data[index];
165 var g = image.data[index + 1];
166 var b = image.data[index + 2];
167 var a = image.data[index + 3];
168 return new Colour(r, g, b, a);
171 function load_random_quote() {
172 var file = "/quotes/quote" + Math.floor(Math.random() * QUOTES_NUMBER + 1) + ".html";
173 $.ajax({url: SERVER + file,
174 success: write_quote});
177 function write_quote(data, status, xhr) {
178 $("#random_quote").html(data);
181 function load_footer()
183 var file = "/footer.html";
184 var currentFile = self.location.hostname + self.location.pathname;
185 var request = http_request_object();
186 var url = "http://" + self.location.hostname + file;
187 request.open("GET", url, false);
188 request.setRequestHeader("User-Agent", navigator.userAgent);
190 // if (oRequest.status == 200) alert(oRequest.responseText);
191 // else alert("Error executing XMLHttpRequest call!");
192 //document.write(url);
193 //document.write(request.responseText);
194 document.getElementById('footer').innerHTML = request.responseText;
199 // Mandelbrot functions
200 function Complex(real, imag)
206 var MIN_C = new Complex(-2.2, -1.4);
207 var MAX_C = new Complex(1.0, 1.4);
211 var max_iter = MIN_ITER;
216 function Result(z, iter)
222 function complex_quad(c)
224 return new Complex(Math.pow(c.real, 2) - Math.pow(c.imag, 2),
225 2.0 * c.real * c.imag);
228 function complex_quad_value(c)
230 return Math.pow(c.real, 2) + Math.pow(c.imag, 2);
233 function complex_add(c1, c2)
235 return new Complex(c1.real + c2.real, c1.imag + c2.imag);
238 function complex_equal(c1, c2)
240 return (c1.real == c2.real) && (c1.imag == c2.imag);
243 function iterate(z, c)
245 z_quad = complex_quad(z);
246 return new Complex(z_quad.real + c.real, z_quad.imag + c.imag);
249 function test(c, max_iter)
252 var z = new Complex(0.0, 0.0);
253 var last_z = new Complex(-1.0, 0.0);
254 var quad_z = complex_quad_value(z);
256 while (iter < max_iter
257 && !complex_equal(z, last_z)
258 && quad_z <= bailout)
262 quad_z = complex_quad_value(z);
265 return new Result(quad_z, iter);
268 function draw(diter, dx, dy, dz, dres)
270 var canvas = document.getElementById('mandelbrot');
272 if (canvas.getContext)
275 var ctx = canvas.getContext('2d');
279 resolution = Math.max(1, resolution + dres);
284 max_iter = Math.max(MIN_ITER, max_iter + diter);
287 var red = "rgb(255, 0, 0)";
288 var white = "rgb(255, 255, 255)";
289 var width = canvas.width;
290 var height = canvas.height;
291 var dim = Math.max(width, height);
292 var dim_ratio = Math.round(width / height);
293 var diff_c = new Complex(max_c.real - min_c.real,
294 max_c.imag - min_c.imag);
295 dx_min = diff_c.real / 100 * (dx + dz);
296 dx_max = diff_c.real / 100 * (dx - dz);
298 dy_min = diff_c.imag / 100 * (dy + dz);
299 dy_max = diff_c.imag / 100 * (dy - dz);
301 var min_inc = new Complex(dx_min * dim_ratio / 2.0, dy_min);
302 var max_inc = new Complex(dx_max * dim_ratio / 2.0, dy_max);
303 min_c = complex_add(min_c, min_inc);
304 max_c = complex_add(max_c, max_inc);
305 diff_c = new Complex(max_c.real - min_c.real,
306 max_c.imag - min_c.imag);
308 for (var y = 0; y < height; y += resolution)
310 for (var x = 0; x < width; x += resolution)
312 var c = new Complex(min_c.real + diff_c.real / dim * x,
313 min_c.imag + diff_c.imag / dim * y);
314 var result = test(c, max_iter);
315 var r = Math.min(255, Math.pow(Math.max(0,
316 (result.iter - max_iter / 20.0)), 2));
317 var g = Math.min(255, Math.pow(Math.max(0,
318 (result.iter - max_iter / 25.0)), 2));
319 var b = Math.min(255, Math.pow(Math.max(0,
320 (result.iter - max_iter / 20.0)), 2));
321 var colour = "rgb(" + r + "," + g + "," + b + ")";
322 ctx.fillStyle = colour;
323 ctx.fillRect(x, y, resolution, resolution);
329 function getEventOffsetX(evt)
331 if (evt.offsetX != null)
334 var obj = evt.target || evt.srcElement;
336 return (evt.clientX - obj.pageLeft);
339 function getEventOffsetY(evt)
341 if (evt.offsetY != null)
344 var obj = evt.target || evt.srcElement;
346 return (evt.clientY - obj.pageTop);
349 function setPageTopLeft( o )
355 while (o.offsetParent)
357 left += o.offsetLeft ;
370 var x = (getEventOffsetX(evt) - 335) / 167.5;
371 var y = (getEventOffsetY(evt) - 140) / 70;
373 draw(iter, x, y, z, res);