script.js
author Eugen Sawin <sawine@me73.com>
Fri, 05 Aug 2011 15:09:00 +0200
changeset 63 702739972799
parent 52 11ccd2095fdd
child 71 bf0295436e1c
permissions -rw-r--r--
Caroll.
     1 var QUOTES_NUMBER = 39;
     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 	
   119 	// if (oRequest.status == 200) alert(oRequest.responseText);
   120 	// else alert("Error executing XMLHttpRequest call!");	
   121 	//document.write(url);
   122 	//document.write(request.responseText);
   123     document.getElementById('random_quote').innerHTML = request.responseText;
   124 }
   125 
   126 function load_footer()
   127 {
   128 	var file = "/footer.html";
   129 	var currentFile = self.location.hostname + self.location.pathname;		
   130 	var request = http_request_object();
   131 	var url  = "http://" + self.location.hostname + file;	
   132 	request.open("GET", url, false);
   133 	request.setRequestHeader("User-Agent", navigator.userAgent);
   134 	request.send(null)
   135 	// if (oRequest.status == 200) alert(oRequest.responseText);
   136 	// else alert("Error executing XMLHttpRequest call!");	
   137 	//document.write(url);
   138 	//document.write(request.responseText);
   139     document.getElementById('footer').innerHTML = request.responseText;
   140 }
   141 
   142 
   143 
   144 // Mandelbrot functions
   145 function Complex(real, imag) 
   146 {
   147 	this.real = real;
   148 	this.imag = imag;
   149 }
   150 
   151 var MIN_C = new Complex(-2.2, -1.4);
   152 var MAX_C = new Complex(1.0, 1.4);
   153 var min_c = MIN_C;
   154 var max_c = MAX_C;
   155 var MIN_ITER = 100;
   156 var max_iter = MIN_ITER;
   157 var zoom = 1.0;
   158 var resolution = 3;
   159 var bailout = 4.0;
   160 
   161 function Result(z, iter) 
   162 {
   163 	this.z = z;
   164 	this.iter = iter;
   165 }
   166 
   167 function complex_quad(c)
   168 {
   169 	return new Complex(Math.pow(c.real, 2) - Math.pow(c.imag, 2), 
   170 		2.0 * c.real * c.imag);
   171 }
   172 
   173 function complex_quad_value(c)
   174 {
   175 	return Math.pow(c.real, 2) + Math.pow(c.imag, 2);
   176 }
   177 
   178 function complex_add(c1, c2)
   179 {
   180 	return new Complex(c1.real + c2.real, c1.imag + c2.imag);
   181 }
   182 
   183 function complex_equal(c1, c2)
   184 {	
   185 	return (c1.real == c2.real) && (c1.imag == c2.imag);
   186 }
   187 
   188 function iterate(z, c) 
   189 {
   190 	z_quad = complex_quad(z);
   191 	return new Complex(z_quad.real + c.real, z_quad.imag + c.imag);
   192 }
   193 
   194 function test(c, max_iter) 
   195 {
   196 	var iter = 0;
   197 	var z = new Complex(0.0, 0.0);
   198 	var last_z = new Complex(-1.0, 0.0);
   199 	var quad_z = complex_quad_value(z);
   200 	
   201 	while (iter < max_iter
   202 		&& !complex_equal(z, last_z)
   203 		&& quad_z <= bailout)
   204 	{
   205 		last_z = z;
   206 		z = iterate(z, c);
   207 		quad_z = complex_quad_value(z);
   208 		iter++;
   209 	}
   210 	return new Result(quad_z, iter);
   211 }
   212 
   213 function draw(diter, dx, dy, dz, dres)
   214 {  
   215 	var canvas = document.getElementById('mandelbrot'); 
   216 	
   217 	if (canvas.getContext)
   218 	{  
   219 		zoom += dz;
   220 		var ctx = canvas.getContext('2d');
   221 
   222 		if (dres != 0)
   223 		{		
   224 			resolution = Math.max(1, resolution + dres);
   225 		}
   226 
   227 		if (diter != 0)
   228 		{
   229 			max_iter = Math.max(MIN_ITER, max_iter + diter);
   230 		}
   231 		
   232 		var red = "rgb(255, 0, 0)";
   233 		var white = "rgb(255, 255, 255)";
   234 		var width = canvas.width;
   235 		var height = canvas.height;
   236 		var dim = Math.max(width, height);
   237 		var dim_ratio = Math.round(width / height);	
   238 		var diff_c = new Complex(max_c.real - min_c.real,
   239 			max_c.imag - min_c.imag);
   240 		dx_min = diff_c.real / 100 * (dx + dz);
   241 		dx_max = diff_c.real / 100 * (dx - dz);
   242 
   243 		dy_min = diff_c.imag / 100 * (dy + dz);
   244 		dy_max = diff_c.imag / 100 * (dy - dz);
   245 
   246 		var min_inc = new Complex(dx_min * dim_ratio / 2.0, dy_min);
   247 		var max_inc = new Complex(dx_max * dim_ratio / 2.0, dy_max);
   248 		min_c = complex_add(min_c, min_inc);
   249 		max_c = complex_add(max_c, max_inc);
   250 		diff_c = new Complex(max_c.real - min_c.real,
   251 			max_c.imag - min_c.imag);
   252 		
   253 		for (var y = 0; y < height; y += resolution) 
   254 		{
   255 			for (var x = 0; x < width; x += resolution) 
   256 			{    			
   257 				var c = new Complex(min_c.real + diff_c.real / dim * x, 
   258 					min_c.imag + diff_c.imag / dim * y);  	
   259 			 	var result = test(c, max_iter);	
   260 		 		var r = Math.min(255, Math.pow(Math.max(0, 
   261 		 			(result.iter - max_iter / 20.0)), 2));
   262 				var g = Math.min(255, Math.pow(Math.max(0, 
   263 					(result.iter - max_iter / 25.0)), 2));			
   264 		 		var b = Math.min(255, Math.pow(Math.max(0, 
   265 					(result.iter - max_iter / 20.0)), 2));
   266 		 		var colour = "rgb(" + r + "," + g + "," + b + ")";
   267 		 		ctx.fillStyle = colour; 
   268 				ctx.fillRect(x, y, resolution, resolution);			
   269 			}
   270   		}
   271 	}  
   272 } 
   273 
   274 function getEventOffsetX(evt)
   275 {
   276 	if (evt.offsetX != null)
   277 		return evt.offsetX;
   278  
   279     var obj = evt.target || evt.srcElement;
   280    	setPageTopLeft(obj);
   281     return (evt.clientX - obj.pageLeft);
   282 }
   283 
   284 function getEventOffsetY(evt)
   285 {
   286 	if (evt.offsetY != null)
   287 		return evt.offsetY;
   288  
   289     var obj = evt.target || evt.srcElement;
   290    	setPageTopLeft(obj);
   291     return (evt.clientY - obj.pageTop);
   292 }
   293  
   294 function setPageTopLeft( o )
   295 {
   296     var top = 0,
   297     left = 0,
   298     obj = o;
   299  
   300     while (o.offsetParent)
   301      {
   302          left += o.offsetLeft ;
   303          top += o.offsetTop ;
   304          o = o.offsetParent ;
   305     };
   306  
   307     obj.pageTop = top;
   308     obj.pageLeft = left; 
   309 }
   310  
   311 function draw2(evt)
   312 {
   313 	var iter = 0;
   314 	var res = 0;
   315 	var x = (getEventOffsetX(evt) - 335) / 167.5;
   316     var y = (getEventOffsetY(evt) - 140) / 70;
   317 	var z = 0;
   318 	draw(iter, x, y, z, res);
   319 }