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