// javascript

function init() {
	//alert('init run');
	addEmailAddresses();
	navPosts();
	initEmailListForm();
	emailListSuccess();
}

function addEmailAddresses() {
	var e3 = "u.com";
	var e2 = "o@bombsintoyo";
	var e1 = "inf";
	var ea = e1+e2+e3;
	
	document.getElementById('contact').href = 'mailto:' + ea;
	
	var v = document.createTextNode(ea);
	document.getElementById('contactEmail').appendChild(v);
}

function emailListSuccess() {
	var urlVars = getUrlVars();
	if (urlVars['joinemaillist'] && urlVars['joinemaillist'] == "success") {
		document.getElementById('alertEmailListSuccess').style.display = 'block';
		document.getElementById('formEmailList').style.display = 'none';
	}
}

function displayContact(idOfObjToAttachTo) {
	var e3 = "u.com";
	var e2 = "o@bombsintoyo";
	var e1 = "inf";
	var ea = e1+e2+e3;
	
	var myH2 = document.createElement('h2');
	var myP = document.createElement('p');
	var myA= document.createElement('a');
	
	var h2Text = document.createTextNode('Contact');
	var aText = document.createTextNode(ea);
	
	myH2.appendChild(h2Text);
	myP.appendChild(myA);
	myA.appendChild(aText);
	myA.href = 'mailto:' + ea;
	
	document.getElementById(idOfObjToAttachTo).appendChild(myH2);
	document.getElementById(idOfObjToAttachTo).appendChild(myP);
}



// Read a page's GET URL variables and return them as an associative array.
// taken from: http://snipplr.com/view.php?codeview&id=799
function getUrlVars() {
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');

    for(var i = 0; i < hashes.length; i++)
    {
        hash = hashes[i].split('=');
        vars.push(hash[0]);
        vars[hash[0]] = hash[1];
    }

    return vars;
}

function initEmailListForm() {
	document.getElementById('submitEmailList').style.display = 'none';
	document.getElementById('join').style.display = 'inline';
	document.getElementById('join').onclick = function() {document.formEmailList.submit();};
}

function navPosts() {
	// collect posts in array
	var arrPosts = recursiveNodeSearch(document.getElementById('blog'), false, 'className', 'post');
	
	// now that we know we can do JS style posts for nav functions. also collect headers from each arrPost.
	var arrPostHeaders = new Array;
	for (var i in arrPosts) {
		arrPosts[i].className += ' postJS';
		objH1 = recursiveNodeSearch(arrPosts[i], true, 'tagName', 'H1');
		arrPostHeaders[i] = objH1.firstChild.nodeValue;
	}
	
	// do initial post selection of most recent post
	navPostsChange(arrPosts, 0);
	
	document.getElementById('recentPosts').style.display = 'block';
	
	var v = document.createElement('UL');
	v.id = 'recentPostsList';
	document.getElementById('recentPosts').appendChild(v);
	
	for (var j in arrPostHeaders) {
		var objLI = document.createElement('LI');
		var objA = document.createElement('A');
		objA.href = '#';
		eval('objA.onclick = function() {if (this.blur) this.blur(); return navPostsChange(arrPosts,'+j+')}');
		objLI.appendChild(objA);
		var objText = document.createTextNode(arrPostHeaders[j]);
		objA.appendChild(objText);
		document.getElementById('recentPostsList').appendChild(objLI);
	}
	
}

function navPostsChange(arrPosts, n) {
	for (var i in arrPosts) {
		arrPosts[i].style.display = 'none';
	}
	
	var objPrev = document.getElementById('prev');
	var objNext = document.getElementById('next');
	if (n==0) {
		//alert('most recent post selected');
		objPrev.className = '';
		objPrev.onclick = function() {if (this.blur) this.blur(); return navPostsChange(arrPosts,1)};
		objNext.className = 'disabled';
		objNext.onclick = function() {if (this.blur) this.blur(); return false};
	} else if (n == (arrPosts.length-1)) {
		//alert('last post selected');
		objPrev.className = 'disabled';
		objPrev.onclick = function() {if (this.blur) this.blur(); return false};
		objNext.className = '';
		objNext.onclick = function() {if (this.blur) this.blur(); return navPostsChange(arrPosts,n-1)};
	} else {
		//alert('post neither first nor last');
		objPrev.className = '';
		objPrev.onclick = function() {if (this.blur) this.blur(); return navPostsChange(arrPosts,n+1)};
		objNext.className = '';
		objNext.onclick = function() {if (this.blur) this.blur(); return navPostsChange(arrPosts,n-1)};
	}
	arrPosts[n].style.display = 'block';

	return false;
}

function setArchiveHref() {
	if (archiveHref) document.getElementById('archive').href = archiveHref;
}

/* ---------------------------------------------------------------------------------------------
recursiveNodeSearch
Last Update: 2008.12.17
This function searches node object's children for targets of a certain className or nodeName
and returns either a single object or an array of objects.

	PARAMETERS
	obj: 					[obj] starting node to recursively search
	returnOnlyFirst:		[boolean] returns only the first item found. if true, return value is an object. if false, return
							value is an array of objects
	property:				[string] property to search on (currently 'nodeName', 'class', 'className' or 'type'
	value:					[string] value of property to search for
	
WARNING: This script seems to work okay for the places I've used it, but didn't work when 
used to grab single className a few levels deep. Needs more work. (haven't tested in a while)
--------------------------------------------------------------------------------------------- */

function recursiveNodeSearch(obj, returnOnlyFirst, property, value) {
	// If there aren't any child nodes for the object, return
	if(!obj.childNodes || obj.childNodes.length == 0) return;
	
	var returnArr = new Array();
		
	// Cycle through child nodes
	for (var i=0; i<obj.childNodes.length; i++) {
		switch (property) {
			case "nodeName":
				if (obj.childNodes[i].nodeName == value) {
					returnArr.push(obj.childNodes[i]);
				}
				break;
			
			// This looks to see if class is present rather than
			// exact className match (ex: "a" matches "a b c")
			case "class":
				if (obj.childNodes[i].className) {
					var tmpArr = obj.childNodes[i].className.split(" ");
					for (var j=0; j<tmpArr.length; j++) {
						if (tmpArr[j] == value) {
							returnArr.push(obj.childNodes[i]);
							break;
						}
					}
				}
				break;
			
			case "className":
				if (obj.childNodes[i].className && obj.childNodes[i].className == value) {
					returnArr.push(obj.childNodes[i]);
				}
				break;
			
			case "type":
				if (obj.childNodes[i].type && obj.childNodes[i].type == value) {
					returnArr.push(obj.childNodes[i]);
				}
				break;
				
			case "tagName":
				if (obj.childNodes[i].tagName && obj.childNodes[i].tagName == value) {
					returnArr.push(obj.childNodes[i]);
				}
				break;
		}
		
		if (returnOnlyFirst && returnArr[0]) return returnArr[0];
		
		// Repeat the function for the children of each child (that's the recursive part).
		// Add the returned items to the current return array.
		var recReturn = recursiveNodeSearch(obj.childNodes[i], returnOnlyFirst, property, value);
		if (recReturn && recReturn.length) {
			for (var j=0; j<recReturn.length; j++) {
				returnArr.push(recReturn[j]);
			}
		} else if (recReturn && recReturn != "") {
			returnArr.push(recReturn);
		}
		if (returnOnlyFirst && returnArr[0]) return returnArr[0];
	}
	
	return returnArr;
}