var XHTMLNS = "http://www.w3.org/1999/xhtml";

var ie = false;

function createElement(element) {
	if(typeof document.createElementNS != 'undefined') {
		return document.createElementNS(XHTMLNS, element)
	}
	else if (typeof document.createElement != 'undefined') {
		return document.createElement(element)
	}
	else {
		return false;
	}
}

function addLoadEvent(func) {
	var oldonload = window.onload
	
	if(typeof window.onload != 'function') {
		window.onload = func
	}
	else {
		if(typeof func == 'function') {
			window.onload = function() {
				func()
				oldonload()
			}
		}
		else {
			window.onload = function() {
				eval(func)
				oldonload()
			}
		}
	}
}

function cancelDefault(e) {
	if(e.cancelable) {
		e.preventDefault()
	}
	else if(document.all) {
		event.returnValue = false
	}
	else {
		alert('not cancelable')
	}
}

function getTarget(e) {
	if(window.event && window.event.srcElement) {
		r = window.event.srcElement
	}
	else if (e && e.target) {
		r = e.target
	}

	return r
}

function addEvent(obj,evType,fn) {
	if (obj.addEventListener) {
		obj.addEventListener(evType,fn,false)
		return true
	}
	else if (obj.attachEvent) {
		var r = obj.attachEvent('on'+evType, fn)
		
		ie = true;
		
		if(!r) {
			alert('cannot add event!');
		}
		
		return r
	}
	else {
		alert('cannot add event!')
		return false
	}
}

function removeEvent(obj,evType,fn) {
	if (obj.removeEventListener) {
		obj.removeEventListener(evType,fn,false)
		return true
	}
	else if (obj.detachEvent) {
		var r = obj.detachEvent('on'+evType, fn)
		return r
	}
	else {
		return false
	}
}

document.getElementsByClassName = function(class_name) {
	var all_obj, ret_obj = new Array(), j = 0, strict = 0, a = 1

	if (document.getElementsByClassName.arguments.length > 1)
		strict = ( document.getElementsByClassName.arguments[1] ? 1 : 0 )

	if (document.all) {
		all_obj = document.all
	}
	else if (document.getElementsByTagName && !document.all) {
		all_obj = document.getElementsByTagName("*")
	}

	for (i = 0; i < all_obj.length; i++) {
		if (
			(' ' + all_obj[i].className + ' ').toLowerCase().match(
				new RegExp (( strict ? '^ ' + class_name + ' $' : '^.* ' + class_name + ' .*$').toLowerCase(),'g' )
			)
		 ) {
			ret_obj[j++] = all_obj[i]
		}
	}

	return ret_obj
}

function getParent(el, pTagName) {
	if(el == null) {
        	return null;
	}
	else if (el.nodeType == 1 && elementCompare(el.tagName,pTagName)) {
		return el;
	}
	else {
		return getParent(el.parentNode, pTagName);
	}
}

function elementCompare(a,b) {
	a = a.toLowerCase() // Gecko bug, supposed to be uppercase
	b = b.toLowerCase()

	if((a == b) || (a == "html:" + b)) { // opera has html: in front of elements
		return true
	}
	else {
		return false
	}
}

function openExternal(e) {
	triggerer = getTarget(e);
	
	actualTriggerer = getParent(triggerer, 'a');
	
	if(actualTriggerer == null) {
		actualTriggerer = getParent(triggerer, 'area');
	}
	
	locationToOpen = actualTriggerer.getAttribute('href');
	
	window.open(locationToOpen, 'externalLink');
	
	cancelDefault(e);
}

function createExternals() {
	externalLinks = document.getElementsByClassName('external');
	
	if(externalLinks.length > 0) {
		for(n = 0; n < externalLinks.length; n++) {
			if(externalLinks[n].className !== 'facebook external') {
				addEvent(externalLinks[n], 'click', openExternal);
			}
		}
	}
}

function openSide(e) {
	cancelDefault(e);
	
	triggerer = getTarget(e);
	
	triggerer = getParent(triggerer, 'a');
	
	thumbnail = triggerer.getElementsByTagName('img')[0].getAttribute('src');
	
	size = /=148/g;
	
	enlargement = thumbnail.replace(size, '=320');
	
	//document.getElementById('zoom').getElementsByTagName('img')[0].setAttribute('src', enlargement);
	
	document.getElementById('zoom').removeChild(document.getElementById('zoom').getElementsByTagName('img')[0]);
	
	newPhotograph = createElement('img');
	newPhotograph.setAttribute('src', enlargement);
	newPhotograph.setAttribute('width', 320);
	newPhotograph.setAttribute('height', 320);
	newPhotograph.setAttribute('alt', '');
	newPhotograph.setAttribute('title', '');
	
	document.getElementById('zoom').appendChild(newPhotograph);
	//getElementsByTagName('img')[0].setAttribute('src', enlargement);
	
	document.location.hash = '#zoom';
}

function createSides() {
	if(document.getElementById('sidePhotographs')) {
		sides = document.getElementById('sidePhotographs').getElementsByTagName('a');
		
		if(sides.length > 0) {
			for(n = 0; n < sides.length; n++) {
				addEvent(sides[n], 'click', openSide);
			}
		}
	}
}

function selectPhotographs(e) {
	cancelDefault(e);
	
	if(document.getElementById('import')) {
		photographs = document.getElementById('import').getElementsByTagName('input');

		if(photographs.length > 0) {
			for(n = 0; n < photographs.length; n++) {
				if(photographs[n].getAttribute('type') == 'checkbox') {
					photographs[n].setAttribute('checked', 'checked');
				}
			}
		}
	}
}

function deselectPhotographs(e) {
	cancelDefault(e);
	
	if(document.getElementById('import')) {
		photographs = document.getElementById('import').getElementsByTagName('input');

		if(photographs.length > 0) {
			for(n = 0; n < photographs.length; n++) {
				if(photographs[n].getAttribute('type') == 'checkbox') {
					photographs[n].removeAttribute('checked');
				}
			}
		}
	}
}

function createSelectPhotographs() {
	if(document.getElementById('import')) {
		topButton1 = createElement('input');
		topButton1.setAttribute('type', 'submit');
		topButton1.setAttribute('value', 'Select all photographs');
		addEvent(topButton1, 'click', selectPhotographs);
		
		document.getElementById('upperButtons').appendChild(document.createTextNode(' '));
		document.getElementById('upperButtons').appendChild(topButton1);
		
		bottomButton1 = createElement('input');
		bottomButton1.setAttribute('type', 'submit');
		bottomButton1.setAttribute('value', 'Select all photographs');
		addEvent(bottomButton1, 'click', selectPhotographs);
		
		document.getElementById('lowerButtons').appendChild(document.createTextNode(' '));
		document.getElementById('lowerButtons').appendChild(bottomButton1);
		
		topButton2 = createElement('input');
		topButton2.setAttribute('type', 'submit');
		topButton2.setAttribute('value', 'Deselect all photographs');
		addEvent(topButton2, 'click', deselectPhotographs);
		
		document.getElementById('upperButtons').appendChild(document.createTextNode(' '));
		document.getElementById('upperButtons').appendChild(topButton2);
		
		bottomButton2 = createElement('input');
		bottomButton2.setAttribute('type', 'submit');
		bottomButton2.setAttribute('value', 'Deselect all photographs');
		addEvent(bottomButton2, 'click', deselectPhotographs);
		
		document.getElementById('lowerButtons').appendChild(document.createTextNode(' '));
		document.getElementById('lowerButtons').appendChild(bottomButton2);
	}
}

/*function createLoader() {
	if(document.getElementById('preload')) {
		document.location = '/';
	}
}*/

addLoadEvent(createExternals);
addLoadEvent(createSides);
addLoadEvent(createSelectPhotographs);
//addLoadEvent(createLoader);
