sawine@72: var QUOTES_NUMBER = 39; sawine@72: var SERVER = "http://me73.com" sawine@72: sawine@72: $(document).ready(function() { sawine@72: var image = new Image(); sawine@72: image.onload = init_logo; sawine@72: image.src = "images/logobase.png"; sawine@72: $("#logo").click(handle_click); sawine@72: $("#logo").hover(function() { sawine@72: $(this).css("cursor", "pointer"); sawine@72: }, function() { sawine@72: $(this).css("cursor", "auto"); sawine@72: }); sawine@72: }); sawine@72: sawine@72: $(document).keypress( function(event) { sawine@72: if (event.which == 13) { sawine@72: event.preventDefault(); sawine@72: update_logo(); sawine@72: } sawine@72: }); sawine@72: sawine@72: var menu_width = 670; sawine@72: var menu_height = 120; sawine@72: sawine@72: var click_events = new Array(); sawine@72: click_events["logo"] = new Array(); sawine@72: click_events["logo"][0] = new Object(); sawine@72: click_events["logo"][0]["min_x"] = 0; sawine@72: click_events["logo"][0]["max_x"] = Math.round(menu_width/4); sawine@72: click_events["logo"][0]["min_y"] = 0; sawine@72: click_events["logo"][0]["max_y"] = menu_height; sawine@72: click_events["logo"][0]["func"] = switch_page; sawine@72: click_events["logo"][0]["args"] = "personalwork.html"; sawine@72: click_events["logo"][1] = new Object(); sawine@72: click_events["logo"][1]["min_x"] = Math.round(menu_width/4) + 1; sawine@72: click_events["logo"][1]["max_x"] = Math.round(menu_width/2); sawine@72: click_events["logo"][1]["min_y"] = 0; sawine@72: click_events["logo"][1]["max_y"] = menu_height; sawine@72: click_events["logo"][1]["func"] = switch_page; sawine@72: click_events["logo"][1]["args"] = "howiwork.html"; sawine@72: click_events["logo"][2] = new Object(); sawine@72: click_events["logo"][2]["min_x"] = Math.round(menu_width/2) + 1; sawine@72: click_events["logo"][2]["max_x"] = Math.round(menu_width/4*3); sawine@72: click_events["logo"][2]["min_y"] = 0; sawine@72: click_events["logo"][2]["max_y"] = menu_height; sawine@72: click_events["logo"][2]["func"] = switch_page; sawine@72: click_events["logo"][2]["args"] = "books.html"; sawine@72: click_events["logo"][3] = new Object(); sawine@72: click_events["logo"][3]["min_x"] = Math.round(menu_width/4*3) + 1; sawine@72: click_events["logo"][3]["max_x"] = menu_width - 1; sawine@72: click_events["logo"][3]["min_y"] = 0; sawine@72: click_events["logo"][3]["max_y"] = menu_height; sawine@72: click_events["logo"][3]["func"] = switch_page; sawine@72: click_events["logo"][3]["args"] = "links.html"; sawine@72: sawine@72: function handle_click(e) { sawine@72: var offset = $("#logo").offset(); sawine@72: var x = e.pageX - offset.left; sawine@72: var y = e.pageY - offset.top; sawine@72: for (var i in click_events[e.target.id]) { sawine@72: var ces = click_events[e.target.id][i]; sawine@72: if (ces && x >= ces["min_x"] && x <= ces["max_x"] sawine@72: && y >= ces["min_y"] && y <= ces["max_y"]) { sawine@72: ces["func"](e.target.id, ces); sawine@72: break; sawine@72: } sawine@72: } sawine@72: } sawine@72: sawine@72: function switch_page(id, params) { sawine@72: var page = params["args"]; sawine@72: $("body").load(page); sawine@72: document.location.href = page; sawine@72: } sawine@72: sawine@72: function color_area(id, min_x, max_x, min_y, max_y, colour) { sawine@72: var canvas = document.getElementById(id); sawine@72: var context = canvas.getContext("2d"); sawine@72: var image = context.getImageData(0, 0, menu_width, menu_height); sawine@72: var pixels = image.data; sawine@72: for (var y = min_y; y <= max_y; y += 1) { sawine@72: for (var x = min_x; x <= max_x; x += 1) { sawine@72: var pix_colour = getPixel(image, x, y); sawine@72: if (pix_colour.a > 0) { sawine@72: colour.a = pix_colour.a; sawine@72: setPixel(image, x, y, colour); sawine@72: } sawine@72: } sawine@72: } sawine@72: context.putImageData(image, 0, 0); sawine@72: } sawine@72: sawine@72: function init_logo(event) { sawine@72: var canvas = document.getElementById("logo"); sawine@72: var context = canvas.getContext("2d"); sawine@72: var image = context.getImageData(0, 0, menu_width, menu_height); sawine@72: canvas.width = menu_width; sawine@72: canvas.height = menu_height; sawine@72: context.drawImage(event.target, 0, 0); sawine@72: var white = new Colour(255, 255, 255); sawine@72: for (var i in click_events["logo"]) { sawine@72: var p = click_events["logo"][i]; sawine@72: var pos = document.location.href.lastIndexOf("/") + 1; sawine@72: if (p["args"] == document.location.href.substr(pos)) { sawine@72: color_area("logo", p["min_x"], p["max_x"], 70, p["max_y"], white); sawine@72: } else { sawine@72: color_area("logo", p["min_x"], p["max_x"], 0, 70, white); sawine@72: } sawine@72: } sawine@72: } sawine@72: sawine@72: function update_logo() { sawine@72: var canvas = document.getElementById("logo"); sawine@72: var context = canvas.getContext("2d"); sawine@72: var image = context.getImageData(0, 0, menu_width, menu_height); sawine@72: var pixels = image.data; sawine@72: var white = new Colour(255, 255, 255); sawine@72: for (var y = 0; y < menu_height; y += 1) { sawine@72: for (var x = 0; x < menu_width; x += 1) { sawine@72: var pix_colour = getPixel(image, x, y); sawine@72: if (pix_colour.a > 0) { sawine@72: setPixel(image, x, y, new Colour(90, 215, 21, pix_colour.a)); sawine@72: } sawine@72: } sawine@72: } sawine@72: context.putImageData(image, 0, 0); sawine@72: } sawine@72: sawine@72: function Colour(r, g, b, a) { sawine@72: this.r = r; sawine@72: this.g = g; sawine@72: this.b = b; sawine@72: this.a = a == undefined ? 255 : a; sawine@72: } sawine@72: Colour.prototype.equals = function(rhs) { sawine@72: for (p in this) { sawine@72: if (typeof(rhs[p]) == undefined sawine@72: || this[p] != rhs[p]) { sawine@72: return false; sawine@72: } sawine@72: } sawine@72: return true; sawine@72: } sawine@72: sawine@72: function setPixel(image, x, y, color) { sawine@72: var index = 4 * (x + y * image.width); sawine@72: image.data[index] = color.r; sawine@72: image.data[index + 1] = color.g; sawine@72: image.data[index + 2] = color.b; sawine@72: image.data[index + 3] = color.a; sawine@72: } sawine@72: sawine@72: function getPixel(image, x, y) { sawine@72: var index = 4 * (x + y * image.width); sawine@72: var r = image.data[index]; sawine@72: var g = image.data[index + 1]; sawine@72: var b = image.data[index + 2]; sawine@72: var a = image.data[index + 3]; sawine@72: return new Colour(r, g, b, a); sawine@72: } sawine@72: sawine@72: function load_random_quote() { sawine@72: var file = "/quotes/quote" + Math.floor(Math.random() * QUOTES_NUMBER + 1) + ".html"; sawine@72: $.ajax({url: SERVER + file, sawine@72: success: write_quote}); sawine@72: return; sawine@72: var currentFile = self.location.hostname + self.location.pathname; sawine@72: var request = http_request_object(); sawine@72: var url = "http://" + self.location.hostname + file; sawine@72: request.open("GET", url, false); sawine@72: request.setRequestHeader("User-Agent", navigator.userAgent); sawine@72: request.send(null) sawine@72: sawine@72: // if (oRequest.status == 200) alert(oRequest.responseText); sawine@72: // else alert("Error executing XMLHttpRequest call!"); sawine@72: //document.write(url); sawine@72: //document.write(request.responseText); sawine@72: document.getElementById('random_quote').innerHTML = request.responseText; sawine@72: } sawine@72: sawine@72: function write_quote(data, status, xhr) { sawine@72: alert(data); sawine@72: $("random_quote").replaceWith(data); sawine@72: } sawine@72: sawine@72: function load_footer() sawine@72: { sawine@72: var file = "/footer.html"; sawine@72: var currentFile = self.location.hostname + self.location.pathname; sawine@72: var request = http_request_object(); sawine@72: var url = "http://" + self.location.hostname + file; sawine@72: request.open("GET", url, false); sawine@72: request.setRequestHeader("User-Agent", navigator.userAgent); sawine@72: request.send(null) sawine@72: // if (oRequest.status == 200) alert(oRequest.responseText); sawine@72: // else alert("Error executing XMLHttpRequest call!"); sawine@72: //document.write(url); sawine@72: //document.write(request.responseText); sawine@72: document.getElementById('footer').innerHTML = request.responseText; sawine@72: } sawine@72: sawine@72: sawine@72: sawine@72: // Mandelbrot functions sawine@72: function Complex(real, imag) sawine@72: { sawine@72: this.real = real; sawine@72: this.imag = imag; sawine@72: } sawine@72: sawine@72: var MIN_C = new Complex(-2.2, -1.4); sawine@72: var MAX_C = new Complex(1.0, 1.4); sawine@72: var min_c = MIN_C; sawine@72: var max_c = MAX_C; sawine@72: var MIN_ITER = 100; sawine@72: var max_iter = MIN_ITER; sawine@72: var zoom = 1.0; sawine@72: var resolution = 3; sawine@72: var bailout = 4.0; sawine@72: sawine@72: function Result(z, iter) sawine@72: { sawine@72: this.z = z; sawine@72: this.iter = iter; sawine@72: } sawine@72: sawine@72: function complex_quad(c) sawine@72: { sawine@72: return new Complex(Math.pow(c.real, 2) - Math.pow(c.imag, 2), sawine@72: 2.0 * c.real * c.imag); sawine@72: } sawine@72: sawine@72: function complex_quad_value(c) sawine@72: { sawine@72: return Math.pow(c.real, 2) + Math.pow(c.imag, 2); sawine@72: } sawine@72: sawine@72: function complex_add(c1, c2) sawine@72: { sawine@72: return new Complex(c1.real + c2.real, c1.imag + c2.imag); sawine@72: } sawine@72: sawine@72: function complex_equal(c1, c2) sawine@72: { sawine@72: return (c1.real == c2.real) && (c1.imag == c2.imag); sawine@72: } sawine@72: sawine@72: function iterate(z, c) sawine@72: { sawine@72: z_quad = complex_quad(z); sawine@72: return new Complex(z_quad.real + c.real, z_quad.imag + c.imag); sawine@72: } sawine@72: sawine@72: function test(c, max_iter) sawine@72: { sawine@72: var iter = 0; sawine@72: var z = new Complex(0.0, 0.0); sawine@72: var last_z = new Complex(-1.0, 0.0); sawine@72: var quad_z = complex_quad_value(z); sawine@72: sawine@72: while (iter < max_iter sawine@72: && !complex_equal(z, last_z) sawine@72: && quad_z <= bailout) sawine@72: { sawine@72: last_z = z; sawine@72: z = iterate(z, c); sawine@72: quad_z = complex_quad_value(z); sawine@72: iter++; sawine@72: } sawine@72: return new Result(quad_z, iter); sawine@72: } sawine@72: sawine@72: function draw(diter, dx, dy, dz, dres) sawine@72: { sawine@72: var canvas = document.getElementById('mandelbrot'); sawine@72: sawine@72: if (canvas.getContext) sawine@72: { sawine@72: zoom += dz; sawine@72: var ctx = canvas.getContext('2d'); sawine@72: sawine@72: if (dres != 0) sawine@72: { sawine@72: resolution = Math.max(1, resolution + dres); sawine@72: } sawine@72: sawine@72: if (diter != 0) sawine@72: { sawine@72: max_iter = Math.max(MIN_ITER, max_iter + diter); sawine@72: } sawine@72: sawine@72: var red = "rgb(255, 0, 0)"; sawine@72: var white = "rgb(255, 255, 255)"; sawine@72: var width = canvas.width; sawine@72: var height = canvas.height; sawine@72: var dim = Math.max(width, height); sawine@72: var dim_ratio = Math.round(width / height); sawine@72: var diff_c = new Complex(max_c.real - min_c.real, sawine@72: max_c.imag - min_c.imag); sawine@72: dx_min = diff_c.real / 100 * (dx + dz); sawine@72: dx_max = diff_c.real / 100 * (dx - dz); sawine@72: sawine@72: dy_min = diff_c.imag / 100 * (dy + dz); sawine@72: dy_max = diff_c.imag / 100 * (dy - dz); sawine@72: sawine@72: var min_inc = new Complex(dx_min * dim_ratio / 2.0, dy_min); sawine@72: var max_inc = new Complex(dx_max * dim_ratio / 2.0, dy_max); sawine@72: min_c = complex_add(min_c, min_inc); sawine@72: max_c = complex_add(max_c, max_inc); sawine@72: diff_c = new Complex(max_c.real - min_c.real, sawine@72: max_c.imag - min_c.imag); sawine@72: sawine@72: for (var y = 0; y < height; y += resolution) sawine@72: { sawine@72: for (var x = 0; x < width; x += resolution) sawine@72: { sawine@72: var c = new Complex(min_c.real + diff_c.real / dim * x, sawine@72: min_c.imag + diff_c.imag / dim * y); sawine@72: var result = test(c, max_iter); sawine@72: var r = Math.min(255, Math.pow(Math.max(0, sawine@72: (result.iter - max_iter / 20.0)), 2)); sawine@72: var g = Math.min(255, Math.pow(Math.max(0, sawine@72: (result.iter - max_iter / 25.0)), 2)); sawine@72: var b = Math.min(255, Math.pow(Math.max(0, sawine@72: (result.iter - max_iter / 20.0)), 2)); sawine@72: var colour = "rgb(" + r + "," + g + "," + b + ")"; sawine@72: ctx.fillStyle = colour; sawine@72: ctx.fillRect(x, y, resolution, resolution); sawine@72: } sawine@72: } sawine@72: } sawine@72: } sawine@72: sawine@72: function getEventOffsetX(evt) sawine@72: { sawine@72: if (evt.offsetX != null) sawine@72: return evt.offsetX; sawine@72: sawine@72: var obj = evt.target || evt.srcElement; sawine@72: setPageTopLeft(obj); sawine@72: return (evt.clientX - obj.pageLeft); sawine@72: } sawine@72: sawine@72: function getEventOffsetY(evt) sawine@72: { sawine@72: if (evt.offsetY != null) sawine@72: return evt.offsetY; sawine@72: sawine@72: var obj = evt.target || evt.srcElement; sawine@72: setPageTopLeft(obj); sawine@72: return (evt.clientY - obj.pageTop); sawine@72: } sawine@72: sawine@72: function setPageTopLeft( o ) sawine@72: { sawine@72: var top = 0, sawine@72: left = 0, sawine@72: obj = o; sawine@72: sawine@72: while (o.offsetParent) sawine@72: { sawine@72: left += o.offsetLeft ; sawine@72: top += o.offsetTop ; sawine@72: o = o.offsetParent ; sawine@72: }; sawine@72: sawine@72: obj.pageTop = top; sawine@72: obj.pageLeft = left; sawine@72: } sawine@72: sawine@72: function draw2(evt) sawine@72: { sawine@72: var iter = 0; sawine@72: var res = 0; sawine@72: var x = (getEventOffsetX(evt) - 335) / 167.5; sawine@72: var y = (getEventOffsetY(evt) - 140) / 70; sawine@72: var z = 0; sawine@72: draw(iter, x, y, z, res); sawine@72: } sawine@72: sawine@72: