Initial version of 2012 menu.
authorEugen Sawin <sawine@me73.com>
Sun, 18 Dec 2011 03:36:00 +0100
changeset 72c78f182f7412
parent 71 bf0295436e1c
child 73 44d14b5e7bab
Initial version of 2012 menu.
dark.css
factory/makefile
factory/raw_images/logobase.xcf
factory/v2012/frame.html
factory/v2012/script.js
factory/yuicompressor.jar
images/logobase.png
script.js
     1.1 --- a/dark.css	Sat Dec 17 19:20:30 2011 +0100
     1.2 +++ b/dark.css	Sun Dec 18 03:36:00 2011 +0100
     1.3 @@ -96,19 +96,19 @@
     1.4      margin: 5px 10px 5px 0px;
     1.5  }
     1.6  
     1.7 -canvas { 
     1.8 +canvas {
     1.9      border: 4px solid #262626;  
    1.10  } 
    1.11  
    1.12  #logo {
    1.13      border-style: none; 
    1.14 -    position: absolute;
    1.15 +    position: relative;
    1.16      margin: 0; 
    1.17      padding: 0;
    1.18      color: #F8F8F8;    
    1.19      /* change the values of top and left to adjust the position of the logo*/
    1.20 -    top: 60px; left: 20px;
    1.21 -    height: 100px;
    1.22 +    top: 40px; left: 25px;
    1.23 +    height: 120px;
    1.24      width: 670px;
    1.25  }
    1.26  
    1.27 @@ -207,7 +207,8 @@
    1.28  /* ------------------------------------------
    1.29     LAYOUT
    1.30     ------------------------------------------- */ 
    1.31 -#wrap {
    1.32 +#wrap { 
    1.33 +    position: relative;
    1.34      width: 1020px;
    1.35      margin: 0 auto;
    1.36      text-align: left;		
     2.1 --- a/factory/makefile	Sat Dec 17 19:20:30 2011 +0100
     2.2 +++ b/factory/makefile	Sun Dec 18 03:36:00 2011 +0100
     2.3 @@ -1,8 +1,10 @@
     2.4  OUTPUT = 
     2.5  FACTORY = 
     2.6 -FRAME = v2012/frame.html
     2.7 -PAGES = v2012/*.html
     2.8 +VERSION = v2012
     2.9 +FRAME = $(VERSION)/frame.html
    2.10 +PAGES = $(VERSION)/*.html
    2.11  
    2.12  compile:
    2.13  	./create_page -a $(FRAME)
    2.14 +	java -jar yuicompressor.jar $(VERSION)/script.js -o ../script.js --charset utf-8
    2.15  
     3.1 Binary file factory/raw_images/logobase.xcf has changed
     4.1 --- a/factory/v2012/frame.html	Sat Dec 17 19:20:30 2011 +0100
     4.2 +++ b/factory/v2012/frame.html	Sun Dec 18 03:36:00 2011 +0100
     4.3 @@ -1,7 +1,7 @@
     4.4  <!DOCTYPE html>
     4.5  <html lang="en">
     4.6    <head>
     4.7 -    <title>Machine Entity 73</title>
     4.8 +    <title>ME73</title>
     4.9      <meta name="author" content="Eugen Sawin <sawine@me73.com>" />
    4.10      <meta name="description" content="A Digital Playground" />
    4.11      <meta name="robots" content="index, follow, noarchive" />
    4.12 @@ -26,20 +26,10 @@
    4.13    <body>
    4.14      <div id="wrap">
    4.15        <div id="header">
    4.16 -        <canvas id="logo" width="670" height="100">
    4.17 +        <canvas id="logo">
    4.18            FIND A BETTER BROWSER
    4.19          </canvas>    
    4.20 -        <div id="nav">
    4.21 -          <ul>
    4.22 -	    <li><a href="index.html">Home</a></li>
    4.23 -	    <li><a href="personalwork.html">Personal Work</a></li>
    4.24 -	    <li><a href="resume.html">Resume</a></li>
    4.25 -	    <li><a href="howiwork.html">How I Work</a></li>
    4.26 -	    <li><a href="experiments.html">Experiments</a></li>
    4.27 -            <li><a href="books.html">Books</a></li>
    4.28 -	    <li><a href="links.html">Links</a></li>
    4.29 -          </ul>
    4.30 -        </div>
    4.31 +        
    4.32        </div>
    4.33        <div id="content-wrap">
    4.34          <div id="main">
    4.35 @@ -48,7 +38,9 @@
    4.36          <div id="sidebar">
    4.37            <p>
    4.38  	    <img src="images/me2.png" alt="me" class="float-left" height="70" width="70" />
    4.39 -            <br />I'm a programmer, a student of computer science, a music enthusiast.
    4.40 +            <br />I'm a programmer,<br />
    4.41 +            a student of computer science,<br />
    4.42 +            a music enthusiast.<br />
    4.43              This is my site.
    4.44            </p>
    4.45            <div id="random_quote"></div>
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/factory/v2012/script.js	Sun Dec 18 03:36:00 2011 +0100
     5.3 @@ -0,0 +1,382 @@
     5.4 +var QUOTES_NUMBER = 39;
     5.5 +var SERVER = "http://me73.com"
     5.6 +
     5.7 +$(document).ready(function() {     
     5.8 +    var image = new Image();
     5.9 +    image.onload = init_logo;
    5.10 +    image.src = "images/logobase.png";
    5.11 +    $("#logo").click(handle_click);   
    5.12 +    $("#logo").hover(function() {
    5.13 +        $(this).css("cursor", "pointer");
    5.14 +    }, function() {
    5.15 +        $(this).css("cursor", "auto");
    5.16 +    }); 
    5.17 +});
    5.18 +
    5.19 +$(document).keypress( function(event) {
    5.20 +    if (event.which == 13) {            
    5.21 +	event.preventDefault();
    5.22 +        update_logo();	    
    5.23 +    }
    5.24 +});
    5.25 +
    5.26 +var menu_width = 670;
    5.27 +var menu_height = 120;
    5.28 +
    5.29 +var click_events = new Array();
    5.30 +click_events["logo"] = new Array();
    5.31 +click_events["logo"][0] = new Object();
    5.32 +click_events["logo"][0]["min_x"] = 0;
    5.33 +click_events["logo"][0]["max_x"] = Math.round(menu_width/4);
    5.34 +click_events["logo"][0]["min_y"] = 0;
    5.35 +click_events["logo"][0]["max_y"] = menu_height;
    5.36 +click_events["logo"][0]["func"] = switch_page;
    5.37 +click_events["logo"][0]["args"] = "personalwork.html";
    5.38 +click_events["logo"][1] = new Object();
    5.39 +click_events["logo"][1]["min_x"] = Math.round(menu_width/4) + 1;
    5.40 +click_events["logo"][1]["max_x"] = Math.round(menu_width/2);
    5.41 +click_events["logo"][1]["min_y"] = 0;
    5.42 +click_events["logo"][1]["max_y"] = menu_height;
    5.43 +click_events["logo"][1]["func"] = switch_page;
    5.44 +click_events["logo"][1]["args"] = "howiwork.html";
    5.45 +click_events["logo"][2] = new Object();
    5.46 +click_events["logo"][2]["min_x"] = Math.round(menu_width/2) + 1;
    5.47 +click_events["logo"][2]["max_x"] = Math.round(menu_width/4*3);
    5.48 +click_events["logo"][2]["min_y"] = 0;
    5.49 +click_events["logo"][2]["max_y"] = menu_height;
    5.50 +click_events["logo"][2]["func"] = switch_page;
    5.51 +click_events["logo"][2]["args"] = "books.html";
    5.52 +click_events["logo"][3] = new Object();
    5.53 +click_events["logo"][3]["min_x"] = Math.round(menu_width/4*3) + 1;
    5.54 +click_events["logo"][3]["max_x"] = menu_width - 1;
    5.55 +click_events["logo"][3]["min_y"] = 0;
    5.56 +click_events["logo"][3]["max_y"] = menu_height;
    5.57 +click_events["logo"][3]["func"] = switch_page;
    5.58 +click_events["logo"][3]["args"] = "links.html";
    5.59 +
    5.60 +function handle_click(e) {
    5.61 +    var offset = $("#logo").offset();
    5.62 +    var x = e.pageX - offset.left;
    5.63 +    var y = e.pageY - offset.top;   
    5.64 +    for (var i in click_events[e.target.id]) {
    5.65 +        var ces = click_events[e.target.id][i];
    5.66 +        if (ces && x >= ces["min_x"] && x <= ces["max_x"]
    5.67 +            && y >= ces["min_y"] && y <= ces["max_y"]) {    
    5.68 +            ces["func"](e.target.id, ces);
    5.69 +            break;
    5.70 +        }
    5.71 +    }
    5.72 +}
    5.73 +
    5.74 +function switch_page(id, params) {
    5.75 +    var page = params["args"];
    5.76 +    $("body").load(page);
    5.77 +    document.location.href = page;    
    5.78 +}
    5.79 +
    5.80 +function color_area(id, min_x, max_x, min_y, max_y, colour) {
    5.81 +    var canvas = document.getElementById(id);
    5.82 +    var context = canvas.getContext("2d");  
    5.83 +    var image = context.getImageData(0, 0, menu_width, menu_height);
    5.84 +    var pixels = image.data;    
    5.85 +    for (var y = min_y; y <= max_y; y += 1) {
    5.86 +        for (var x = min_x; x <= max_x; x += 1) {
    5.87 +            var pix_colour = getPixel(image, x, y);
    5.88 +            if (pix_colour.a > 0) {
    5.89 +                colour.a = pix_colour.a;
    5.90 +                setPixel(image, x, y, colour);
    5.91 +            }
    5.92 +        }
    5.93 +    }   
    5.94 +    context.putImageData(image, 0, 0);
    5.95 +}
    5.96 +
    5.97 +function init_logo(event) {
    5.98 +    var canvas = document.getElementById("logo");
    5.99 +    var context = canvas.getContext("2d"); 
   5.100 +    var image = context.getImageData(0, 0, menu_width, menu_height);  
   5.101 +    canvas.width = menu_width;
   5.102 +    canvas.height = menu_height;
   5.103 +    context.drawImage(event.target, 0, 0);
   5.104 +    var white = new Colour(255, 255, 255);
   5.105 +    for (var i in click_events["logo"]) {
   5.106 +        var p = click_events["logo"][i];        
   5.107 +        var pos = document.location.href.lastIndexOf("/") + 1;       
   5.108 +        if (p["args"] == document.location.href.substr(pos)) {         
   5.109 +            color_area("logo", p["min_x"], p["max_x"], 70, p["max_y"], white);           
   5.110 +        } else {
   5.111 +            color_area("logo", p["min_x"], p["max_x"], 0, 70, white);
   5.112 +        }
   5.113 +    }
   5.114 +}
   5.115 +
   5.116 +function update_logo() {
   5.117 +    var canvas = document.getElementById("logo");
   5.118 +    var context = canvas.getContext("2d");  
   5.119 +    var image = context.getImageData(0, 0, menu_width, menu_height);
   5.120 +    var pixels = image.data;
   5.121 +    var white = new Colour(255, 255, 255);
   5.122 +    for (var y = 0; y < menu_height; y += 1) {
   5.123 +        for (var x = 0; x < menu_width; x += 1) {
   5.124 +            var pix_colour = getPixel(image, x, y);
   5.125 +            if (pix_colour.a > 0) {
   5.126 +                setPixel(image, x, y, new Colour(90, 215, 21, pix_colour.a));
   5.127 +            }
   5.128 +        }
   5.129 +    }   
   5.130 +    context.putImageData(image, 0, 0);
   5.131 +}
   5.132 +
   5.133 +function Colour(r, g, b, a) {
   5.134 +    this.r = r;
   5.135 +    this.g = g;
   5.136 +    this.b = b;
   5.137 +    this.a = a == undefined ? 255 : a;
   5.138 +}
   5.139 +Colour.prototype.equals = function(rhs) {
   5.140 +    for (p in this) {
   5.141 +        if (typeof(rhs[p]) == undefined
   5.142 +           || this[p] != rhs[p]) {           
   5.143 +            return false;
   5.144 +        }
   5.145 +    }
   5.146 +    return true;
   5.147 +}
   5.148 +
   5.149 +function setPixel(image, x, y, color) {
   5.150 +    var index = 4 * (x + y * image.width);
   5.151 +    image.data[index] = color.r;
   5.152 +    image.data[index + 1] = color.g;
   5.153 +    image.data[index + 2] = color.b;
   5.154 +    image.data[index + 3] = color.a;
   5.155 +}
   5.156 +
   5.157 +function getPixel(image, x, y) {   
   5.158 +    var index = 4 * (x + y * image.width);
   5.159 +    var r = image.data[index];
   5.160 +    var g = image.data[index + 1];
   5.161 +    var b = image.data[index + 2];
   5.162 +    var a = image.data[index + 3];
   5.163 +    return new Colour(r, g, b, a);
   5.164 +}
   5.165 +
   5.166 +function load_random_quote() {
   5.167 +    var file = "/quotes/quote" + Math.floor(Math.random() * QUOTES_NUMBER + 1) + ".html";
   5.168 +    $.ajax({url: SERVER + file,
   5.169 +            success: write_quote});   
   5.170 +    return;
   5.171 +    var currentFile = self.location.hostname + self.location.pathname;		
   5.172 +    var request = http_request_object();
   5.173 +    var url  = "http://" + self.location.hostname + file;	
   5.174 +    request.open("GET", url, false);
   5.175 +    request.setRequestHeader("User-Agent", navigator.userAgent);
   5.176 +    request.send(null)
   5.177 +    
   5.178 +    // if (oRequest.status == 200) alert(oRequest.responseText);
   5.179 +    // else alert("Error executing XMLHttpRequest call!");	
   5.180 +    //document.write(url);
   5.181 +    //document.write(request.responseText);
   5.182 +    document.getElementById('random_quote').innerHTML = request.responseText;
   5.183 +}
   5.184 +
   5.185 +function write_quote(data, status, xhr) {
   5.186 +    alert(data);
   5.187 +    $("random_quote").replaceWith(data);
   5.188 +}
   5.189 +
   5.190 +function load_footer()
   5.191 +{
   5.192 +	var file = "/footer.html";
   5.193 +	var currentFile = self.location.hostname + self.location.pathname;		
   5.194 +	var request = http_request_object();
   5.195 +	var url  = "http://" + self.location.hostname + file;	
   5.196 +	request.open("GET", url, false);
   5.197 +	request.setRequestHeader("User-Agent", navigator.userAgent);
   5.198 +	request.send(null)
   5.199 +	// if (oRequest.status == 200) alert(oRequest.responseText);
   5.200 +	// else alert("Error executing XMLHttpRequest call!");	
   5.201 +	//document.write(url);
   5.202 +	//document.write(request.responseText);
   5.203 +    document.getElementById('footer').innerHTML = request.responseText;
   5.204 +}
   5.205 +
   5.206 +
   5.207 +
   5.208 +// Mandelbrot functions
   5.209 +function Complex(real, imag) 
   5.210 +{
   5.211 +	this.real = real;
   5.212 +	this.imag = imag;
   5.213 +}
   5.214 +
   5.215 +var MIN_C = new Complex(-2.2, -1.4);
   5.216 +var MAX_C = new Complex(1.0, 1.4);
   5.217 +var min_c = MIN_C;
   5.218 +var max_c = MAX_C;
   5.219 +var MIN_ITER = 100;
   5.220 +var max_iter = MIN_ITER;
   5.221 +var zoom = 1.0;
   5.222 +var resolution = 3;
   5.223 +var bailout = 4.0;
   5.224 +
   5.225 +function Result(z, iter) 
   5.226 +{
   5.227 +	this.z = z;
   5.228 +	this.iter = iter;
   5.229 +}
   5.230 +
   5.231 +function complex_quad(c)
   5.232 +{
   5.233 +	return new Complex(Math.pow(c.real, 2) - Math.pow(c.imag, 2), 
   5.234 +		2.0 * c.real * c.imag);
   5.235 +}
   5.236 +
   5.237 +function complex_quad_value(c)
   5.238 +{
   5.239 +	return Math.pow(c.real, 2) + Math.pow(c.imag, 2);
   5.240 +}
   5.241 +
   5.242 +function complex_add(c1, c2)
   5.243 +{
   5.244 +	return new Complex(c1.real + c2.real, c1.imag + c2.imag);
   5.245 +}
   5.246 +
   5.247 +function complex_equal(c1, c2)
   5.248 +{	
   5.249 +	return (c1.real == c2.real) && (c1.imag == c2.imag);
   5.250 +}
   5.251 +
   5.252 +function iterate(z, c) 
   5.253 +{
   5.254 +	z_quad = complex_quad(z);
   5.255 +	return new Complex(z_quad.real + c.real, z_quad.imag + c.imag);
   5.256 +}
   5.257 +
   5.258 +function test(c, max_iter) 
   5.259 +{
   5.260 +	var iter = 0;
   5.261 +	var z = new Complex(0.0, 0.0);
   5.262 +	var last_z = new Complex(-1.0, 0.0);
   5.263 +	var quad_z = complex_quad_value(z);
   5.264 +	
   5.265 +	while (iter < max_iter
   5.266 +		&& !complex_equal(z, last_z)
   5.267 +		&& quad_z <= bailout)
   5.268 +	{
   5.269 +		last_z = z;
   5.270 +		z = iterate(z, c);
   5.271 +		quad_z = complex_quad_value(z);
   5.272 +		iter++;
   5.273 +	}
   5.274 +	return new Result(quad_z, iter);
   5.275 +}
   5.276 +
   5.277 +function draw(diter, dx, dy, dz, dres)
   5.278 +{  
   5.279 +	var canvas = document.getElementById('mandelbrot'); 
   5.280 +	
   5.281 +	if (canvas.getContext)
   5.282 +	{  
   5.283 +		zoom += dz;
   5.284 +		var ctx = canvas.getContext('2d');
   5.285 +
   5.286 +		if (dres != 0)
   5.287 +		{		
   5.288 +			resolution = Math.max(1, resolution + dres);
   5.289 +		}
   5.290 +
   5.291 +		if (diter != 0)
   5.292 +		{
   5.293 +			max_iter = Math.max(MIN_ITER, max_iter + diter);
   5.294 +		}
   5.295 +		
   5.296 +		var red = "rgb(255, 0, 0)";
   5.297 +		var white = "rgb(255, 255, 255)";
   5.298 +		var width = canvas.width;
   5.299 +		var height = canvas.height;
   5.300 +		var dim = Math.max(width, height);
   5.301 +		var dim_ratio = Math.round(width / height);	
   5.302 +		var diff_c = new Complex(max_c.real - min_c.real,
   5.303 +			max_c.imag - min_c.imag);
   5.304 +		dx_min = diff_c.real / 100 * (dx + dz);
   5.305 +		dx_max = diff_c.real / 100 * (dx - dz);
   5.306 +
   5.307 +		dy_min = diff_c.imag / 100 * (dy + dz);
   5.308 +		dy_max = diff_c.imag / 100 * (dy - dz);
   5.309 +
   5.310 +		var min_inc = new Complex(dx_min * dim_ratio / 2.0, dy_min);
   5.311 +		var max_inc = new Complex(dx_max * dim_ratio / 2.0, dy_max);
   5.312 +		min_c = complex_add(min_c, min_inc);
   5.313 +		max_c = complex_add(max_c, max_inc);
   5.314 +		diff_c = new Complex(max_c.real - min_c.real,
   5.315 +			max_c.imag - min_c.imag);
   5.316 +		
   5.317 +		for (var y = 0; y < height; y += resolution) 
   5.318 +		{
   5.319 +			for (var x = 0; x < width; x += resolution) 
   5.320 +			{    			
   5.321 +				var c = new Complex(min_c.real + diff_c.real / dim * x, 
   5.322 +					min_c.imag + diff_c.imag / dim * y);  	
   5.323 +			 	var result = test(c, max_iter);	
   5.324 +		 		var r = Math.min(255, Math.pow(Math.max(0, 
   5.325 +		 			(result.iter - max_iter / 20.0)), 2));
   5.326 +				var g = Math.min(255, Math.pow(Math.max(0, 
   5.327 +					(result.iter - max_iter / 25.0)), 2));			
   5.328 +		 		var b = Math.min(255, Math.pow(Math.max(0, 
   5.329 +					(result.iter - max_iter / 20.0)), 2));
   5.330 +		 		var colour = "rgb(" + r + "," + g + "," + b + ")";
   5.331 +		 		ctx.fillStyle = colour; 
   5.332 +				ctx.fillRect(x, y, resolution, resolution);			
   5.333 +			}
   5.334 +  		}
   5.335 +	}  
   5.336 +} 
   5.337 +
   5.338 +function getEventOffsetX(evt)
   5.339 +{
   5.340 +	if (evt.offsetX != null)
   5.341 +		return evt.offsetX;
   5.342 + 
   5.343 +    var obj = evt.target || evt.srcElement;
   5.344 +   	setPageTopLeft(obj);
   5.345 +    return (evt.clientX - obj.pageLeft);
   5.346 +}
   5.347 +
   5.348 +function getEventOffsetY(evt)
   5.349 +{
   5.350 +	if (evt.offsetY != null)
   5.351 +		return evt.offsetY;
   5.352 + 
   5.353 +    var obj = evt.target || evt.srcElement;
   5.354 +   	setPageTopLeft(obj);
   5.355 +    return (evt.clientY - obj.pageTop);
   5.356 +}
   5.357 + 
   5.358 +function setPageTopLeft( o )
   5.359 +{
   5.360 +    var top = 0,
   5.361 +    left = 0,
   5.362 +    obj = o;
   5.363 + 
   5.364 +    while (o.offsetParent)
   5.365 +     {
   5.366 +         left += o.offsetLeft ;
   5.367 +         top += o.offsetTop ;
   5.368 +         o = o.offsetParent ;
   5.369 +    };
   5.370 + 
   5.371 +    obj.pageTop = top;
   5.372 +    obj.pageLeft = left; 
   5.373 +}
   5.374 + 
   5.375 +function draw2(evt)
   5.376 +{
   5.377 +	var iter = 0;
   5.378 +	var res = 0;
   5.379 +	var x = (getEventOffsetX(evt) - 335) / 167.5;
   5.380 +    var y = (getEventOffsetY(evt) - 140) / 70;
   5.381 +	var z = 0;
   5.382 +	draw(iter, x, y, z, res);
   5.383 +}
   5.384 +
   5.385 +
     6.1 Binary file factory/yuicompressor.jar has changed
     7.1 Binary file images/logobase.png has changed
     8.1 --- a/script.js	Sat Dec 17 19:20:30 2011 +0100
     8.2 +++ b/script.js	Sun Dec 18 03:36:00 2011 +0100
     8.3 @@ -1,300 +1,1 @@
     8.4 -var QUOTES_NUMBER = 39;
     8.5 -var SERVER = "http://me73.com"
     8.6 -
     8.7 -$(document).ready (   
     8.8 -    function() { 
     8.9 -        var image = new Image();
    8.10 -        image.onload = init_logo;
    8.11 -        image.src = "images/logobase.png";        
    8.12 -    }
    8.13 -);
    8.14 -
    8.15 -$(document).keypress (
    8.16 -    function(event) {
    8.17 -	if (event.which == 13) {            
    8.18 -	    event.preventDefault();
    8.19 -            update_logo();	    
    8.20 -	}
    8.21 -    }
    8.22 -);
    8.23 -
    8.24 -var width = 670;
    8.25 -var height = 100;
    8.26 -
    8.27 -function init_logo(ev) {
    8.28 -    var canvas = document.getElementById("logo");
    8.29 -    var context = canvas.getContext("2d");  
    8.30 -    canvas.width = width;
    8.31 -    canvas.height = height;   
    8.32 -    context.drawImage(ev.target, 0, 0);    
    8.33 -}
    8.34 -
    8.35 -function update_logo() {
    8.36 -    var canvas = document.getElementById("logo");
    8.37 -    var context = canvas.getContext("2d");  
    8.38 -    var image = context.getImageData(0, 0, width, height);
    8.39 -    var pixels = image.data;
    8.40 -    var white = new Color(255, 255, 255);
    8.41 -    for (var y = 0; y < height; y += 1) {
    8.42 -        for (var x = 0; x < width; x += 1) {
    8.43 -            if (getPixel(image, x, y).r > 0) {
    8.44 -                setPixel(image, x, y, new Color(90, 215, 21));
    8.45 -            }
    8.46 -        }
    8.47 -    }   
    8.48 -    context.putImageData(image, 0, 0);
    8.49 -}
    8.50 -
    8.51 -function Color(r, g, b, a) {
    8.52 -    this.r = r;
    8.53 -    this.g = g;
    8.54 -    this.b = b;
    8.55 -    this.a = a == undefined ? 255 : a;
    8.56 -}
    8.57 -Color.prototype.equals = function(rhs) {
    8.58 -    for (p in this) {
    8.59 -        if (typeof(rhs[p]) == undefined
    8.60 -           || this[p] != rhs[p]) {           
    8.61 -            return false;
    8.62 -        }
    8.63 -    }
    8.64 -    return true;
    8.65 -}
    8.66 -
    8.67 -function setPixel(image, x, y, color) {
    8.68 -    var index = 4 * (x + y * image.width);
    8.69 -    image.data[index] = color.r;
    8.70 -    image.data[index + 1] = color.g;
    8.71 -    image.data[index + 2] = color.b;
    8.72 -    image.data[index + 3] = color.a;
    8.73 -}
    8.74 -
    8.75 -function getPixel(image, x, y) {   
    8.76 -    var index = 4 * (x + y * image.width);
    8.77 -    var r = image.data[index];
    8.78 -    var g = image.data[index + 1];
    8.79 -    var b = image.data[index + 2];
    8.80 -    var a = image.data[index + 3];
    8.81 -    return new Color(r, g, b, a);
    8.82 -}
    8.83 -
    8.84 -function load_random_quote() {
    8.85 -    var file = "/quotes/quote" + Math.floor(Math.random() * QUOTES_NUMBER + 1) + ".html";
    8.86 -    $.ajax({url: SERVER + file,
    8.87 -            success: write_quote});   
    8.88 -    return;
    8.89 -    var currentFile = self.location.hostname + self.location.pathname;		
    8.90 -    var request = http_request_object();
    8.91 -    var url  = "http://" + self.location.hostname + file;	
    8.92 -    request.open("GET", url, false);
    8.93 -    request.setRequestHeader("User-Agent", navigator.userAgent);
    8.94 -    request.send(null)
    8.95 -    
    8.96 -    // if (oRequest.status == 200) alert(oRequest.responseText);
    8.97 -    // else alert("Error executing XMLHttpRequest call!");	
    8.98 -    //document.write(url);
    8.99 -    //document.write(request.responseText);
   8.100 -    document.getElementById('random_quote').innerHTML = request.responseText;
   8.101 -}
   8.102 -
   8.103 -function write_quote(data, status, xhr) {
   8.104 -    alert(data);
   8.105 -    $("random_quote").replaceWith(data);
   8.106 -}
   8.107 -
   8.108 -function load_footer()
   8.109 -{
   8.110 -	var file = "/footer.html";
   8.111 -	var currentFile = self.location.hostname + self.location.pathname;		
   8.112 -	var request = http_request_object();
   8.113 -	var url  = "http://" + self.location.hostname + file;	
   8.114 -	request.open("GET", url, false);
   8.115 -	request.setRequestHeader("User-Agent", navigator.userAgent);
   8.116 -	request.send(null)
   8.117 -	// if (oRequest.status == 200) alert(oRequest.responseText);
   8.118 -	// else alert("Error executing XMLHttpRequest call!");	
   8.119 -	//document.write(url);
   8.120 -	//document.write(request.responseText);
   8.121 -    document.getElementById('footer').innerHTML = request.responseText;
   8.122 -}
   8.123 -
   8.124 -
   8.125 -
   8.126 -// Mandelbrot functions
   8.127 -function Complex(real, imag) 
   8.128 -{
   8.129 -	this.real = real;
   8.130 -	this.imag = imag;
   8.131 -}
   8.132 -
   8.133 -var MIN_C = new Complex(-2.2, -1.4);
   8.134 -var MAX_C = new Complex(1.0, 1.4);
   8.135 -var min_c = MIN_C;
   8.136 -var max_c = MAX_C;
   8.137 -var MIN_ITER = 100;
   8.138 -var max_iter = MIN_ITER;
   8.139 -var zoom = 1.0;
   8.140 -var resolution = 3;
   8.141 -var bailout = 4.0;
   8.142 -
   8.143 -function Result(z, iter) 
   8.144 -{
   8.145 -	this.z = z;
   8.146 -	this.iter = iter;
   8.147 -}
   8.148 -
   8.149 -function complex_quad(c)
   8.150 -{
   8.151 -	return new Complex(Math.pow(c.real, 2) - Math.pow(c.imag, 2), 
   8.152 -		2.0 * c.real * c.imag);
   8.153 -}
   8.154 -
   8.155 -function complex_quad_value(c)
   8.156 -{
   8.157 -	return Math.pow(c.real, 2) + Math.pow(c.imag, 2);
   8.158 -}
   8.159 -
   8.160 -function complex_add(c1, c2)
   8.161 -{
   8.162 -	return new Complex(c1.real + c2.real, c1.imag + c2.imag);
   8.163 -}
   8.164 -
   8.165 -function complex_equal(c1, c2)
   8.166 -{	
   8.167 -	return (c1.real == c2.real) && (c1.imag == c2.imag);
   8.168 -}
   8.169 -
   8.170 -function iterate(z, c) 
   8.171 -{
   8.172 -	z_quad = complex_quad(z);
   8.173 -	return new Complex(z_quad.real + c.real, z_quad.imag + c.imag);
   8.174 -}
   8.175 -
   8.176 -function test(c, max_iter) 
   8.177 -{
   8.178 -	var iter = 0;
   8.179 -	var z = new Complex(0.0, 0.0);
   8.180 -	var last_z = new Complex(-1.0, 0.0);
   8.181 -	var quad_z = complex_quad_value(z);
   8.182 -	
   8.183 -	while (iter < max_iter
   8.184 -		&& !complex_equal(z, last_z)
   8.185 -		&& quad_z <= bailout)
   8.186 -	{
   8.187 -		last_z = z;
   8.188 -		z = iterate(z, c);
   8.189 -		quad_z = complex_quad_value(z);
   8.190 -		iter++;
   8.191 -	}
   8.192 -	return new Result(quad_z, iter);
   8.193 -}
   8.194 -
   8.195 -function draw(diter, dx, dy, dz, dres)
   8.196 -{  
   8.197 -	var canvas = document.getElementById('mandelbrot'); 
   8.198 -	
   8.199 -	if (canvas.getContext)
   8.200 -	{  
   8.201 -		zoom += dz;
   8.202 -		var ctx = canvas.getContext('2d');
   8.203 -
   8.204 -		if (dres != 0)
   8.205 -		{		
   8.206 -			resolution = Math.max(1, resolution + dres);
   8.207 -		}
   8.208 -
   8.209 -		if (diter != 0)
   8.210 -		{
   8.211 -			max_iter = Math.max(MIN_ITER, max_iter + diter);
   8.212 -		}
   8.213 -		
   8.214 -		var red = "rgb(255, 0, 0)";
   8.215 -		var white = "rgb(255, 255, 255)";
   8.216 -		var width = canvas.width;
   8.217 -		var height = canvas.height;
   8.218 -		var dim = Math.max(width, height);
   8.219 -		var dim_ratio = Math.round(width / height);	
   8.220 -		var diff_c = new Complex(max_c.real - min_c.real,
   8.221 -			max_c.imag - min_c.imag);
   8.222 -		dx_min = diff_c.real / 100 * (dx + dz);
   8.223 -		dx_max = diff_c.real / 100 * (dx - dz);
   8.224 -
   8.225 -		dy_min = diff_c.imag / 100 * (dy + dz);
   8.226 -		dy_max = diff_c.imag / 100 * (dy - dz);
   8.227 -
   8.228 -		var min_inc = new Complex(dx_min * dim_ratio / 2.0, dy_min);
   8.229 -		var max_inc = new Complex(dx_max * dim_ratio / 2.0, dy_max);
   8.230 -		min_c = complex_add(min_c, min_inc);
   8.231 -		max_c = complex_add(max_c, max_inc);
   8.232 -		diff_c = new Complex(max_c.real - min_c.real,
   8.233 -			max_c.imag - min_c.imag);
   8.234 -		
   8.235 -		for (var y = 0; y < height; y += resolution) 
   8.236 -		{
   8.237 -			for (var x = 0; x < width; x += resolution) 
   8.238 -			{    			
   8.239 -				var c = new Complex(min_c.real + diff_c.real / dim * x, 
   8.240 -					min_c.imag + diff_c.imag / dim * y);  	
   8.241 -			 	var result = test(c, max_iter);	
   8.242 -		 		var r = Math.min(255, Math.pow(Math.max(0, 
   8.243 -		 			(result.iter - max_iter / 20.0)), 2));
   8.244 -				var g = Math.min(255, Math.pow(Math.max(0, 
   8.245 -					(result.iter - max_iter / 25.0)), 2));			
   8.246 -		 		var b = Math.min(255, Math.pow(Math.max(0, 
   8.247 -					(result.iter - max_iter / 20.0)), 2));
   8.248 -		 		var colour = "rgb(" + r + "," + g + "," + b + ")";
   8.249 -		 		ctx.fillStyle = colour; 
   8.250 -				ctx.fillRect(x, y, resolution, resolution);			
   8.251 -			}
   8.252 -  		}
   8.253 -	}  
   8.254 -} 
   8.255 -
   8.256 -function getEventOffsetX(evt)
   8.257 -{
   8.258 -	if (evt.offsetX != null)
   8.259 -		return evt.offsetX;
   8.260 - 
   8.261 -    var obj = evt.target || evt.srcElement;
   8.262 -   	setPageTopLeft(obj);
   8.263 -    return (evt.clientX - obj.pageLeft);
   8.264 -}
   8.265 -
   8.266 -function getEventOffsetY(evt)
   8.267 -{
   8.268 -	if (evt.offsetY != null)
   8.269 -		return evt.offsetY;
   8.270 - 
   8.271 -    var obj = evt.target || evt.srcElement;
   8.272 -   	setPageTopLeft(obj);
   8.273 -    return (evt.clientY - obj.pageTop);
   8.274 -}
   8.275 - 
   8.276 -function setPageTopLeft( o )
   8.277 -{
   8.278 -    var top = 0,
   8.279 -    left = 0,
   8.280 -    obj = o;
   8.281 - 
   8.282 -    while (o.offsetParent)
   8.283 -     {
   8.284 -         left += o.offsetLeft ;
   8.285 -         top += o.offsetTop ;
   8.286 -         o = o.offsetParent ;
   8.287 -    };
   8.288 - 
   8.289 -    obj.pageTop = top;
   8.290 -    obj.pageLeft = left; 
   8.291 -}
   8.292 - 
   8.293 -function draw2(evt)
   8.294 -{
   8.295 -	var iter = 0;
   8.296 -	var res = 0;
   8.297 -	var x = (getEventOffsetX(evt) - 335) / 167.5;
   8.298 -    var y = (getEventOffsetY(evt) - 140) / 70;
   8.299 -	var z = 0;
   8.300 -	draw(iter, x, y, z, res);
   8.301 -}
   8.302 -
   8.303 -
   8.304 +var QUOTES_NUMBER=39;var SERVER="http://me73.com";$(document).ready(function(){var a=new Image();a.onload=init_logo;a.src="images/logobase.png";$("#logo").click(handle_click);$("#logo").hover(function(){$(this).css("cursor","pointer")},function(){$(this).css("cursor","auto")})});$(document).keypress(function(a){if(a.which==13){a.preventDefault();update_logo()}});var menu_width=670;var menu_height=120;var click_events=new Array();click_events.logo=new Array();click_events.logo[0]=new Object();click_events.logo[0]["min_x"]=0;click_events.logo[0]["max_x"]=Math.round(menu_width/4);click_events.logo[0]["min_y"]=0;click_events.logo[0]["max_y"]=menu_height;click_events.logo[0]["func"]=switch_page;click_events.logo[0]["args"]="personalwork.html";click_events.logo[1]=new Object();click_events.logo[1]["min_x"]=Math.round(menu_width/4)+1;click_events.logo[1]["max_x"]=Math.round(menu_width/2);click_events.logo[1]["min_y"]=0;click_events.logo[1]["max_y"]=menu_height;click_events.logo[1]["func"]=switch_page;click_events.logo[1]["args"]="howiwork.html";click_events.logo[2]=new Object();click_events.logo[2]["min_x"]=Math.round(menu_width/2)+1;click_events.logo[2]["max_x"]=Math.round(menu_width/4*3);click_events.logo[2]["min_y"]=0;click_events.logo[2]["max_y"]=menu_height;click_events.logo[2]["func"]=switch_page;click_events.logo[2]["args"]="books.html";click_events.logo[3]=new Object();click_events.logo[3]["min_x"]=Math.round(menu_width/4*3)+1;click_events.logo[3]["max_x"]=menu_width-1;click_events.logo[3]["min_y"]=0;click_events.logo[3]["max_y"]=menu_height;click_events.logo[3]["func"]=switch_page;click_events.logo[3]["args"]="links.html";function handle_click(c){var f=$("#logo").offset();var a=c.pageX-f.left;var g=c.pageY-f.top;for(var b in click_events[c.target.id]){var d=click_events[c.target.id][b];if(d&&a>=d.min_x&&a<=d.max_x&&g>=d.min_y&&g<=d.max_y){d.func(c.target.id,d);break}}}function switch_page(c,b){var a=b.args;$("body").load(a);document.location.href=a}function color_area(c,l,b,j,m,a){var e=document.getElementById(c);var d=e.getContext("2d");var g=d.getImageData(0,0,menu_width,menu_height);var f=g.data;for(var i=j;i<=m;i+=1){for(var k=l;k<=b;k+=1){var h=getPixel(g,k,i);if(h.a>0){a.a=h.a;setPixel(g,k,i,a)}}}d.putImageData(g,0,0)}function init_logo(e){var b=document.getElementById("logo");var d=b.getContext("2d");var g=d.getImageData(0,0,menu_width,menu_height);b.width=menu_width;b.height=menu_height;d.drawImage(e.target,0,0);var a=new Colour(255,255,255);for(var c in click_events.logo){var f=click_events.logo[c];var h=document.location.href.lastIndexOf("/")+1;if(f.args==document.location.href.substr(h)){color_area("logo",f.min_x,f.max_x,70,f.max_y,a)}else{color_area("logo",f.min_x,f.max_x,0,70,a)}}}function update_logo(){var c=document.getElementById("logo");var d=c.getContext("2d");var e=d.getImageData(0,0,menu_width,menu_height);var h=e.data;var b=new Colour(255,255,255);for(var g=0;g<menu_height;g+=1){for(var a=0;a<menu_width;a+=1){var f=getPixel(e,a,g);if(f.a>0){setPixel(e,a,g,new Colour(90,215,21,f.a))}}}d.putImageData(e,0,0)}function Colour(f,e,c,d){this.r=f;this.g=e;this.b=c;this.a=d==undefined?255:d}Colour.prototype.equals=function(a){for(p in this){if(typeof(a[p])==undefined||this[p]!=a[p]){return false}}return true};function setPixel(d,a,e,b){var c=4*(a+e*d.width);d.data[c]=b.r;d.data[c+1]=b.g;d.data[c+2]=b.b;d.data[c+3]=b.a}function getPixel(j,d,k){var f=4*(d+k*j.width);var i=j.data[f];var h=j.data[f+1];var c=j.data[f+2];var e=j.data[f+3];return new Colour(i,h,c,e)}function load_random_quote(){var c="/quotes/quote"+Math.floor(Math.random()*QUOTES_NUMBER+1)+".html";$.ajax({url:SERVER+c,success:write_quote});return;var a=self.location.hostname+self.location.pathname;var d=http_request_object();var b="http://"+self.location.hostname+c;d.open("GET",b,false);d.setRequestHeader("User-Agent",navigator.userAgent);d.send(null);document.getElementById("random_quote").innerHTML=d.responseText}function write_quote(b,a,c){alert(b);$("random_quote").replaceWith(b)}function load_footer(){var c="/footer.html";var a=self.location.hostname+self.location.pathname;var d=http_request_object();var b="http://"+self.location.hostname+c;d.open("GET",b,false);d.setRequestHeader("User-Agent",navigator.userAgent);d.send(null);document.getElementById("footer").innerHTML=d.responseText}function Complex(b,a){this.real=b;this.imag=a}var MIN_C=new Complex(-2.2,-1.4);var MAX_C=new Complex(1,1.4);var min_c=MIN_C;var max_c=MAX_C;var MIN_ITER=100;var max_iter=MIN_ITER;var zoom=1;var resolution=3;var bailout=4;function Result(b,a){this.z=b;this.iter=a}function complex_quad(a){return new Complex(Math.pow(a.real,2)-Math.pow(a.imag,2),2*a.real*a.imag)}function complex_quad_value(a){return Math.pow(a.real,2)+Math.pow(a.imag,2)}function complex_add(b,a){return new Complex(b.real+a.real,b.imag+a.imag)}function complex_equal(b,a){return(b.real==a.real)&&(b.imag==a.imag)}function iterate(a,b){z_quad=complex_quad(a);return new Complex(z_quad.real+b.real,z_quad.imag+b.imag)}function test(g,d){var b=0;var f=new Complex(0,0);var e=new Complex(-1,0);var a=complex_quad_value(f);while(b<d&&!complex_equal(f,e)&&a<=bailout){e=f;f=iterate(f,g);a=complex_quad_value(f);b++}return new Result(a,b)}function draw(m,n,l,i,B){var a=document.getElementById("mandelbrot");if(a.getContext){zoom+=i;var t=a.getContext("2d");if(B!=0){resolution=Math.max(1,resolution+B)}if(m!=0){max_iter=Math.max(MIN_ITER,max_iter+m)}var d="rgb(255, 0, 0)";var e="rgb(255, 255, 255)";var s=a.width;var q=a.height;var u=Math.max(s,q);var E=Math.round(s/q);var z=new Complex(max_c.real-min_c.real,max_c.imag-min_c.imag);dx_min=z.real/100*(n+i);dx_max=z.real/100*(n-i);dy_min=z.imag/100*(l+i);dy_max=z.imag/100*(l-i);var v=new Complex(dx_min*E/2,dy_min);var D=new Complex(dx_max*E/2,dy_max);min_c=complex_add(min_c,v);max_c=complex_add(max_c,D);z=new Complex(max_c.real-min_c.real,max_c.imag-min_c.imag);for(var f=0;f<q;f+=resolution){for(var h=0;h<s;h+=resolution){var A=new Complex(min_c.real+z.real/u*h,min_c.imag+z.imag/u*f);var k=test(A,max_iter);var o=Math.min(255,Math.pow(Math.max(0,(k.iter-max_iter/20)),2));var w=Math.min(255,Math.pow(Math.max(0,(k.iter-max_iter/25)),2));var C=Math.min(255,Math.pow(Math.max(0,(k.iter-max_iter/20)),2));var j="rgb("+o+","+w+","+C+")";t.fillStyle=j;t.fillRect(h,f,resolution,resolution)}}}}function getEventOffsetX(a){if(a.offsetX!=null){return a.offsetX}var b=a.target||a.srcElement;setPageTopLeft(b);return(a.clientX-b.pageLeft)}function getEventOffsetY(a){if(a.offsetY!=null){return a.offsetY}var b=a.target||a.srcElement;setPageTopLeft(b);return(a.clientY-b.pageTop)}function setPageTopLeft(d){var c=0,b=0,a=d;while(d.offsetParent){b+=d.offsetLeft;c+=d.offsetTop;d=d.offsetParent}a.pageTop=c;a.pageLeft=b}function draw2(c){var b=0;var d=0;var a=(getEventOffsetX(c)-335)/167.5;var f=(getEventOffsetY(c)-140)/70;var e=0;draw(b,a,f,e,d)};
   8.305 \ No newline at end of file