script.js
author Eugen Sawin <sawine@me73.com>
Sat, 19 Feb 2011 01:35:36 +0100
changeset 48 dd2c816a5673
parent 25 b2386d49eeae
child 52 11ccd2095fdd
permissions -rw-r--r--
Added press releases about bachelor thesis.
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@20
   141
sawine@20
   142
sawine@7
   143
// Mandelbrot functions
sawine@7
   144
function Complex(real, imag) 
sawine@7
   145
{
sawine@7
   146
	this.real = real;
sawine@7
   147
	this.imag = imag;
sawine@7
   148
}
sawine@7
   149
sawine@7
   150
var MIN_C = new Complex(-2.2, -1.4);
sawine@7
   151
var MAX_C = new Complex(1.0, 1.4);
sawine@7
   152
var min_c = MIN_C;
sawine@7
   153
var max_c = MAX_C;
sawine@20
   154
var MIN_ITER = 100;
sawine@20
   155
var max_iter = MIN_ITER;
sawine@10
   156
var zoom = 1.0;
sawine@17
   157
var resolution = 3;
sawine@17
   158
var bailout = 4.0;
sawine@7
   159
sawine@7
   160
function Result(z, iter) 
sawine@7
   161
{
sawine@7
   162
	this.z = z;
sawine@7
   163
	this.iter = iter;
sawine@7
   164
}
sawine@7
   165
sawine@7
   166
function complex_quad(c)
sawine@7
   167
{
sawine@7
   168
	return new Complex(Math.pow(c.real, 2) - Math.pow(c.imag, 2), 
sawine@7
   169
		2.0 * c.real * c.imag);
sawine@7
   170
}
sawine@7
   171
sawine@7
   172
function complex_quad_value(c)
sawine@7
   173
{
sawine@7
   174
	return Math.pow(c.real, 2) + Math.pow(c.imag, 2);
sawine@7
   175
}
sawine@7
   176
sawine@7
   177
function complex_add(c1, c2)
sawine@7
   178
{
sawine@7
   179
	return new Complex(c1.real + c2.real, c1.imag + c2.imag);
sawine@7
   180
}
sawine@7
   181
sawine@17
   182
function complex_equal(c1, c2)
sawine@17
   183
{	
sawine@17
   184
	return (c1.real == c2.real) && (c1.imag == c2.imag);
sawine@17
   185
}
sawine@17
   186
sawine@7
   187
function iterate(z, c) 
sawine@7
   188
{
sawine@7
   189
	z_quad = complex_quad(z);
sawine@7
   190
	return new Complex(z_quad.real + c.real, z_quad.imag + c.imag);
sawine@7
   191
}
sawine@7
   192
sawine@7
   193
function test(c, max_iter) 
sawine@7
   194
{
sawine@7
   195
	var iter = 0;
sawine@7
   196
	var z = new Complex(0.0, 0.0);
sawine@17
   197
	var last_z = new Complex(-1.0, 0.0);
sawine@17
   198
	var quad_z = complex_quad_value(z);
sawine@17
   199
	
sawine@17
   200
	while (iter < max_iter
sawine@17
   201
		&& !complex_equal(z, last_z)
sawine@17
   202
		&& quad_z <= bailout)
sawine@7
   203
	{
sawine@17
   204
		last_z = z;
sawine@7
   205
		z = iterate(z, c);
sawine@17
   206
		quad_z = complex_quad_value(z);
sawine@7
   207
		iter++;
sawine@7
   208
	}
sawine@17
   209
	return new Result(quad_z, iter);
sawine@7
   210
}
sawine@7
   211
sawine@20
   212
function draw(diter, dx, dy, dz, dres)
sawine@7
   213
{  
sawine@17
   214
	var canvas = document.getElementById('mandelbrot'); 
sawine@17
   215
	
sawine@7
   216
	if (canvas.getContext)
sawine@7
   217
	{  
sawine@17
   218
		zoom += dz;
sawine@12
   219
		var ctx = canvas.getContext('2d');
sawine@17
   220
sawine@17
   221
		if (dres != 0)
sawine@17
   222
		{		
sawine@17
   223
			resolution = Math.max(1, resolution + dres);
sawine@17
   224
		}
sawine@20
   225
sawine@20
   226
		if (diter != 0)
sawine@20
   227
		{
sawine@20
   228
			max_iter = Math.max(MIN_ITER, max_iter + diter);
sawine@20
   229
		}
sawine@17
   230
		
sawine@20
   231
		var red = "rgb(255, 0, 0)";
sawine@20
   232
		var white = "rgb(255, 255, 255)";
sawine@17
   233
		var width = canvas.width;
sawine@17
   234
		var height = canvas.height;
sawine@17
   235
		var dim = Math.max(width, height);
sawine@17
   236
		var dim_ratio = Math.round(width / height);	
sawine@17
   237
		var diff_c = new Complex(max_c.real - min_c.real,
sawine@17
   238
			max_c.imag - min_c.imag);
sawine@17
   239
		dx_min = diff_c.real / 100 * (dx + dz);
sawine@17
   240
		dx_max = diff_c.real / 100 * (dx - dz);
sawine@17
   241
sawine@17
   242
		dy_min = diff_c.imag / 100 * (dy + dz);
sawine@17
   243
		dy_max = diff_c.imag / 100 * (dy - dz);
sawine@17
   244
sawine@17
   245
		var min_inc = new Complex(dx_min * dim_ratio / 2.0, dy_min);
sawine@17
   246
		var max_inc = new Complex(dx_max * dim_ratio / 2.0, dy_max);
sawine@7
   247
		min_c = complex_add(min_c, min_inc);
sawine@7
   248
		max_c = complex_add(max_c, max_inc);
sawine@17
   249
		diff_c = new Complex(max_c.real - min_c.real,
sawine@7
   250
			max_c.imag - min_c.imag);
sawine@7
   251
		
sawine@22
   252
		for (var y = 0; y < height; y += resolution) 
sawine@7
   253
		{
sawine@17
   254
			for (var x = 0; x < width; x += resolution) 
sawine@17
   255
			{    			
sawine@17
   256
				var c = new Complex(min_c.real + diff_c.real / dim * x, 
sawine@17
   257
					min_c.imag + diff_c.imag / dim * y);  	
sawine@17
   258
			 	var result = test(c, max_iter);	
sawine@17
   259
		 		var r = Math.min(255, Math.pow(Math.max(0, 
sawine@17
   260
		 			(result.iter - max_iter / 20.0)), 2));
sawine@17
   261
				var g = Math.min(255, Math.pow(Math.max(0, 
sawine@17
   262
					(result.iter - max_iter / 25.0)), 2));			
sawine@17
   263
		 		var b = Math.min(255, Math.pow(Math.max(0, 
sawine@17
   264
					(result.iter - max_iter / 20.0)), 2));
sawine@25
   265
		 		var colour = "rgb(" + r + "," + g + "," + b + ")";
sawine@25
   266
		 		ctx.fillStyle = colour; 
sawine@20
   267
				ctx.fillRect(x, y, resolution, resolution);			
sawine@7
   268
			}
sawine@7
   269
  		}
sawine@7
   270
	}  
sawine@30
   271
} 
sawine@30
   272
sawine@30
   273
function getEventOffsetX(evt)
sawine@30
   274
{
sawine@30
   275
	if (evt.offsetX != null)
sawine@30
   276
		return evt.offsetX;
sawine@30
   277
 
sawine@30
   278
    var obj = evt.target || evt.srcElement;
sawine@30
   279
   	setPageTopLeft(obj);
sawine@30
   280
    return (evt.clientX - obj.pageLeft);
sawine@30
   281
}
sawine@30
   282
sawine@30
   283
function getEventOffsetY(evt)
sawine@30
   284
{
sawine@30
   285
	if (evt.offsetY != null)
sawine@30
   286
		return evt.offsetY;
sawine@30
   287
 
sawine@30
   288
    var obj = evt.target || evt.srcElement;
sawine@30
   289
   	setPageTopLeft(obj);
sawine@30
   290
    return (evt.clientY - obj.pageTop);
sawine@30
   291
}
sawine@30
   292
 
sawine@30
   293
function setPageTopLeft( o )
sawine@30
   294
{
sawine@30
   295
    var top = 0,
sawine@30
   296
    left = 0,
sawine@30
   297
    obj = o;
sawine@30
   298
 
sawine@30
   299
    while (o.offsetParent)
sawine@30
   300
     {
sawine@30
   301
         left += o.offsetLeft ;
sawine@30
   302
         top += o.offsetTop ;
sawine@30
   303
         o = o.offsetParent ;
sawine@30
   304
    };
sawine@30
   305
 
sawine@30
   306
    obj.pageTop = top;
sawine@30
   307
    obj.pageLeft = left; 
sawine@30
   308
}
sawine@30
   309
 
sawine@30
   310
function draw2(evt)
sawine@30
   311
{
sawine@30
   312
	var iter = 0;
sawine@30
   313
	var res = 0;
sawine@30
   314
	var x = (getEventOffsetX(evt) - 335) / 167.5;
sawine@30
   315
    var y = (getEventOffsetY(evt) - 140) / 70;
sawine@30
   316
	var z = 0;
sawine@30
   317
	draw(iter, x, y, z, res);
sawine@30
   318
}