/**
 *	Peterned V
 *	(c) 2004 - Peter Nederlof 
 *	-------------------------
 */

try {
	// yes, safari doesn't do this
	Node.prototype.attachEvent = function(type, handler) {
		this.addEventListener(type.substring(2), handler, false);
	}
} catch (e){ }

LinkFilter = {
	relations:[],
	add:function(rel, action) {
		this.relations[rel] = action;
	},
	
	handleEvent:function(event) {
		// cancel for keycombos or non-leftclick
		if(event.ctrlKey || event.shiftKey || event.altKey) return true;
		if(event.which && event.which != 1) return true;
		
		var action, target = event.target || event.srcElement;
		while(target.parentNode && !/a/i.test(target.nodeName)) {
			target = target.parentNode;
		}
		
		if(target.rel && /a/i.test(target.nodeName)) {
			action = this.relations[target.rel];
			if(action) {
				action(target);
				try {
					event.preventDefault();
				} catch(e){}
				return false;
			}
		} return true;
	}
}
	document.attachEvent('onclick', function(event){
		return LinkFilter.handleEvent(event);
	});

	LinkFilter.add('gallery', openGalleryImage);
	
	LinkFilter.add('blobdrop', openDemo(250,300));
	LinkFilter.add('pacman5k', openDemo(500,500));
	LinkFilter.add('rotatrix', openDemo(800, 600));
	LinkFilter.add('sojourn', openDemo(390, 420));
	LinkFilter.add('operation043', openDemo(363, 420));
	LinkFilter.add('pudracer', openDemo(480, 410));
	LinkFilter.add('scorched', openDemo(660, 500));
	LinkFilter.add('pacman', openDemo(375, 450));

	LinkFilter.add('rotator', openDemo(640, 480));
	LinkFilter.add('designbuddy', openDemo(800, 600));
	LinkFilter.add('bacteria', openDemo(430, 500));
	LinkFilter.add('dna', openDemo(640, 480));
	LinkFilter.add('blocks', openDemo(660, 260));
	LinkFilter.add('stress', openDemo(390, 250));
	LinkFilter.add('canvas', openDemo(520, 360));

function openGalleryImage(link) {	
	openCentered('image.html?' + link.href, 640, 480);	
}

function openDemo(w, h) {
	return function(link) { openCentered(link.href, w, h); }
}

function openCentered(url, w, h) {
	var x = (screen.width - w)/2, y = (screen.height - h)/2;
	window.open(url, '', 'left=' + x + ',top=' + y + ',width=' + w +',height=' + h);
}

/**
 *	Stylesheet switch
 *	-------------------------
 */

var STYLESHEET = 'peternedStyle';

function switchStylesheet(title) {
	var sheet, sheets = document.getElementsByTagName('link');
	for(var i=0; i<sheets.length; i++) {
		sheet = sheets[i];
		if(sheet.media != 'screen' || !sheet.title) continue;

		sheet.disabled = true;		
		if(sheet.title == title) {
			sheet.disabled = false;
		}
	}

	rememberStylesheet(title);
}

function rememberStylesheet(title) {
	var expires = new Date();
	expires.setTime(expires.getTime() + 1000*60*60*24);
	setCookie(STYLESHEET, title, expires);
}
	function restoreStylesheet() {
		var sheet = getCookie(STYLESHEET);
		if(sheet != false) {
			switchStylesheet(sheet);
		}
	}

window.onunload = function() {
	// if UA's stylesheet switcher was used, save choice on unload
	var sheet, sheets = document.getElementsByTagName('link');
	try	{
		for(var i=0; i<sheets.length; i++) {
			sheet = sheets[i];
			if(sheet.media != 'screen' || !sheet.title) continue;
			if(sheet.disabled == false) {
				rememberStylesheet(sheet.title);
			}
		}	
	} catch (e){
		// oh well, we tried...
	}
}

/**	
 *	Cookie
 *	-------------------------
 */

function setCookie(name, value, expire) {
	document.cookie = name + "=" + escape(value)   
	+ "; expires=" + expire.toGMTString();
}

function getCookie(name) {
	if(!document.cookie) return false;
	var cookie, cookies = document.cookie.split(';');
	for(var i=0; i<cookies.length; i++) {
		cookie = cookies[i].split('=');
		if(cookie[0] == name) { 
			return unescape(cookie[1]);
		}
	}	return false;
}

/**
 *	Before onload
 *	-------------------------
 */	
	restoreStylesheet();
