script.js
author Eugen Sawin <sawine@me73.com>
Tue, 06 Jul 2010 00:22:27 +0200
changeset 19 31c7acfbf85c
parent 13 e6eb1311a49c
child 20 adbea491e9b9
permissions -rw-r--r--
Fixed wrong draw call.
sawine@0
     1
var QUOTES_NUMBER = 32;
sawine@0
     2
sawine@0
     3
function load_page(html, params)
sawine@0
     4
{
sawine@0
     5
	if (params != "")
sawine@0
     6
		html += "?";	
sawine@0
     7
	window.location = html + params;	
sawine@0
     8
	//window.location.reload();
sawine@0
     9
}
sawine@0
    10
sawine@0
    11
function google_an1()
sawine@0
    12
{
sawine@0
    13
    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
sawine@0
    14
    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));    
sawine@0
    15
}
sawine@0
    16
sawine@0
    17
function google_an2()
sawine@0
    18
{
sawine@0
    19
    var pageTracker = _gat._getTracker("UA-2137333-1");
sawine@0
    20
    pageTracker._initData();
sawine@0
    21
    pageTracker._trackPageview();
sawine@0
    22
}
sawine@0
    23
sawine@0
    24
function google_an()
sawine@0
    25
{	    
sawine@0
    26
	google_an1();
sawine@0
    27
	if (typeof(_gat) == "object")
sawine@0
    28
	    google_an2();	
sawine@0
    29
}
sawine@0
    30
sawine@0
    31
function http_request_object()
sawine@0
    32
{
sawine@0
    33
    var xmlHttpObject = null;
sawine@0
    34
    
sawine@0
    35
    if (typeof(XMLHttpRequest) != "undefined") 
sawine@0
    36
    {
sawine@0
    37
        xmlHttpObject = new XMLHttpRequest();
sawine@0
    38
    }
sawine@0
    39
    
sawine@0
    40
    //For IE6 and IE5
sawine@0
    41
    if (xmlHttpObject == null) 
sawine@0
    42
    {
sawine@0
    43
        try 
sawine@0
    44
        {
sawine@0
    45
            xmlHttpObject = new ActiveXObject("Microsoft.XMLHTTP");
sawine@0
    46
        }   
sawine@0
    47
        catch(e) 
sawine@0
    48
        {
sawine@0
    49
            try 
sawine@0
    50
            {
sawine@0
    51
                xmlHttpObject = new ActiveXObject("Msxml2.XMLHTTP");
sawine@0
    52
            }
sawine@0
    53
            catch(e) 
sawine@0
    54
            {
sawine@0
    55
                xmlHttpObject = null;
sawine@0
    56
            }
sawine@0
    57
        }
sawine@0
    58
    }
sawine@0
    59
    return xmlHttpObject;
sawine@0
    60
}
sawine@0
    61
sawine@0
    62
function load_header(current)
sawine@0
    63
{
sawine@0
    64
    var file;
sawine@0
    65
	if (current == "home")
sawine@0
    66
        file = "/homenav.html";
sawine@0
    67
    else if (current == "resume")
sawine@0
    68
        file = "/resumenav.html";
sawine@0
    69
    else if (current == "howiwork")
sawine@0
    70
        file = "/howiworknav.html";
sawine@0
    71
    else if (current == "personalwork")
sawine@0
    72
        file = "/personalworknav.html";
sawine@0
    73
    else if (current == "tutorials")
sawine@0
    74
        file = "/tutorialsnav.html";
sawine@0
    75
    else if (current == "contact")
sawine@0
    76
        file = "/contactnav.html";
sawine@0
    77
	
sawine@0
    78
	var currentFile = self.location.hostname + self.location.pathname;		
sawine@0
    79
	var request = http_request_object();
sawine@0
    80
	var url  = "http://" + self.location.hostname + file;
sawine@0
    81
	request.open("GET", url, false);
sawine@0
    82
	request.setRequestHeader("User-Agent", navigator.userAgent);
sawine@0
    83
	request.send(null)
sawine@0
    84
	// if (oRequest.status == 200) alert(oRequest.responseText);
sawine@0
    85
	// else alert("Error executing XMLHttpRequest call!");	
sawine@0
    86
	//document.write(url);
sawine@0
    87
    document.getElementById('header').innerHTML = request.responseText;
sawine@0
    88
    //document.write(request.responseText);
sawine@0
    89
    
sawine@0
    90
    //alert(request.responseText);
sawine@0
    91
}
sawine@0
    92
sawine@0
    93
function load_sidebar()
sawine@0
    94
{
sawine@0
    95
    var file = "/sidebar.html";
sawine@0
    96
	var currentFile = self.location.hostname + self.location.pathname;		
sawine@0
    97
	var request = http_request_object();
sawine@0
    98
	var url  = "http://" + self.location.hostname + file;	
sawine@0
    99
	request.open("GET", url, false);
sawine@0
   100
	request.setRequestHeader("User-Agent", navigator.userAgent);
sawine@0
   101
	request.send(null)
sawine@0
   102
	// if (oRequest.status == 200) alert(oRequest.responseText);
sawine@0
   103
	// else alert("Error executing XMLHttpRequest call!");	
sawine@0
   104
	//document.write(url);
sawine@0
   105
	//document.write(request.responseText);
sawine@0
   106
    document.getElementById('sidebar').innerHTML = request.responseText;
sawine@0
   107
}
sawine@0
   108
sawine@0
   109
function load_random_quote()
sawine@0
   110
{   
sawine@0
   111
   var file = "/quotes/quote" + Math.floor(Math.random() * QUOTES_NUMBER + 1) + ".html";
sawine@0
   112
	var currentFile = self.location.hostname + self.location.pathname;		
sawine@0
   113
	var request = http_request_object();
sawine@0
   114
	var url  = "http://" + self.location.hostname + file;	
sawine@0
   115
	request.open("GET", url, false);
sawine@0
   116
	request.setRequestHeader("User-Agent", navigator.userAgent);
sawine@0
   117
	request.send(null)
sawine@0
   118
	// if (oRequest.status == 200) alert(oRequest.responseText);
sawine@0
   119
	// else alert("Error executing XMLHttpRequest call!");	
sawine@0
   120
	//document.write(url);
sawine@0
   121
	//document.write(request.responseText);
sawine@0
   122
    document.getElementById('random_quote').innerHTML = request.responseText;
sawine@0
   123
}
sawine@0
   124
sawine@0
   125
function load_footer()
sawine@0
   126
{
sawine@0
   127
	var file = "/footer.html";
sawine@0
   128
	var currentFile = self.location.hostname + self.location.pathname;		
sawine@0
   129
	var request = http_request_object();
sawine@0
   130
	var url  = "http://" + self.location.hostname + file;	
sawine@0
   131
	request.open("GET", url, false);
sawine@0
   132
	request.setRequestHeader("User-Agent", navigator.userAgent);
sawine@0
   133
	request.send(null)
sawine@0
   134
	// if (oRequest.status == 200) alert(oRequest.responseText);
sawine@0
   135
	// else alert("Error executing XMLHttpRequest call!");	
sawine@0
   136
	//document.write(url);
sawine@0
   137
	//document.write(request.responseText);
sawine@0
   138
    document.getElementById('footer').innerHTML = request.responseText;
sawine@0
   139
}
sawine@7
   140
sawine@7
   141
// Mandelbrot functions
sawine@7
   142
function Complex(real, imag) 
sawine@7
   143
{
sawine@7
   144
	this.real = real;
sawine@7
   145
	this.imag = imag;
sawine@7
   146
}
sawine@7
   147
sawine@7
   148
var MIN_C = new Complex(-2.2, -1.4);
sawine@7
   149
var MAX_C = new Complex(1.0, 1.4);
sawine@7
   150
var min_c = MIN_C;
sawine@7
   151
var max_c = MAX_C;
sawine@7
   152
var max_iter = 100;
sawine@10
   153
var zoom = 1.0;
sawine@17
   154
var resolution = 3;
sawine@17
   155
var bailout = 4.0;
sawine@7
   156
sawine@7
   157
function Result(z, iter) 
sawine@7
   158
{
sawine@7
   159
	this.z = z;
sawine@7
   160
	this.iter = iter;
sawine@7
   161
}
sawine@7
   162
sawine@7
   163
function complex_quad(c)
sawine@7
   164
{
sawine@7
   165
	return new Complex(Math.pow(c.real, 2) - Math.pow(c.imag, 2), 
sawine@7
   166
		2.0 * c.real * c.imag);
sawine@7
   167
}
sawine@7
   168
sawine@7
   169
function complex_quad_value(c)
sawine@7
   170
{
sawine@7
   171
	return Math.pow(c.real, 2) + Math.pow(c.imag, 2);
sawine@7
   172
}
sawine@7
   173
sawine@7
   174
function complex_add(c1, c2)
sawine@7
   175
{
sawine@7
   176
	return new Complex(c1.real + c2.real, c1.imag + c2.imag);
sawine@7
   177
}
sawine@7
   178
sawine@17
   179
function complex_equal(c1, c2)
sawine@17
   180
{	
sawine@17
   181
	return (c1.real == c2.real) && (c1.imag == c2.imag);
sawine@17
   182
}
sawine@17
   183
sawine@7
   184
function iterate(z, c) 
sawine@7
   185
{
sawine@7
   186
	z_quad = complex_quad(z);
sawine@7
   187
	return new Complex(z_quad.real + c.real, z_quad.imag + c.imag);
sawine@7
   188
}
sawine@7
   189
sawine@7
   190
function test(c, max_iter) 
sawine@7
   191
{
sawine@7
   192
	var iter = 0;
sawine@7
   193
	var z = new Complex(0.0, 0.0);
sawine@17
   194
	var last_z = new Complex(-1.0, 0.0);
sawine@17
   195
	var quad_z = complex_quad_value(z);
sawine@17
   196
	
sawine@17
   197
	while (iter < max_iter
sawine@17
   198
		&& !complex_equal(z, last_z)
sawine@17
   199
		&& quad_z <= bailout)
sawine@7
   200
	{
sawine@17
   201
		last_z = z;
sawine@7
   202
		z = iterate(z, c);
sawine@17
   203
		quad_z = complex_quad_value(z);
sawine@7
   204
		iter++;
sawine@7
   205
	}
sawine@17
   206
	return new Result(quad_z, iter);
sawine@7
   207
}
sawine@7
   208
sawine@17
   209
function draw(iter, dx, dy, dz, dres)
sawine@7
   210
{  
sawine@17
   211
	var canvas = document.getElementById('mandelbrot'); 
sawine@17
   212
	
sawine@7
   213
	if (canvas.getContext)
sawine@7
   214
	{  
sawine@17
   215
		zoom += dz;
sawine@12
   216
		var ctx = canvas.getContext('2d');
sawine@17
   217
sawine@17
   218
		if (dres != 0)
sawine@17
   219
		{		
sawine@17
   220
			resolution = Math.max(1, resolution + dres);
sawine@17
   221
		}
sawine@17
   222
		
sawine@17
   223
		var width = canvas.width;
sawine@17
   224
		var height = canvas.height;
sawine@17
   225
		var dim = Math.max(width, height);
sawine@17
   226
		var dim_ratio = Math.round(width / height);	
sawine@17
   227
		var diff_c = new Complex(max_c.real - min_c.real,
sawine@17
   228
			max_c.imag - min_c.imag);
sawine@17
   229
		dx_min = diff_c.real / 100 * (dx + dz);
sawine@17
   230
		dx_max = diff_c.real / 100 * (dx - dz);
sawine@17
   231
sawine@17
   232
		dy_min = diff_c.imag / 100 * (dy + dz);
sawine@17
   233
		dy_max = diff_c.imag / 100 * (dy - dz);
sawine@17
   234
sawine@17
   235
		var min_inc = new Complex(dx_min * dim_ratio / 2.0, dy_min);
sawine@17
   236
		var max_inc = new Complex(dx_max * dim_ratio / 2.0, dy_max);
sawine@7
   237
		min_c = complex_add(min_c, min_inc);
sawine@7
   238
		max_c = complex_add(max_c, max_inc);
sawine@7
   239
		max_iter += iter;
sawine@17
   240
		diff_c = new Complex(max_c.real - min_c.real,
sawine@7
   241
			max_c.imag - min_c.imag);
sawine@7
   242
		
sawine@17
   243
		for (var y = 0; y < height; y += resolution) 
sawine@7
   244
		{
sawine@17
   245
			for (var x = 0; x < width; x += resolution) 
sawine@17
   246
			{    			
sawine@17
   247
				var c = new Complex(min_c.real + diff_c.real / dim * x, 
sawine@17
   248
					min_c.imag + diff_c.imag / dim * y);  	
sawine@17
   249
			 	var result = test(c, max_iter);	
sawine@17
   250
		 		var r = Math.min(255, Math.pow(Math.max(0, 
sawine@17
   251
		 			(result.iter - max_iter / 20.0)), 2));
sawine@17
   252
				var g = Math.min(255, Math.pow(Math.max(0, 
sawine@17
   253
					(result.iter - max_iter / 25.0)), 2));			
sawine@17
   254
		 		var b = Math.min(255, Math.pow(Math.max(0, 
sawine@17
   255
					(result.iter - max_iter / 20.0)), 2));
sawine@17
   256
		 		var colour = r + "," + g + "," + b;
sawine@17
   257
		 		ctx.fillStyle = "rgb(" + colour + ")"; 
sawine@17
   258
				ctx.fillRect(x, y, resolution, resolution);				 
sawine@7
   259
			}
sawine@7
   260
  		}
sawine@7
   261
	}  
sawine@7
   262
}