/*
 * LinkJax 1.0 - Jeff Minard ( http://jrm.cc/ )
 * Heavily inspired by AJFORM - 'World's Easiest JavaScript AJAX ToolKit'
 *  - http://www.redredmusic.com/brendon/ajform/
 */

var linkjax_xmlhttp;
var userFunc;

function linkjax() {

	if(window.XMLHttpRequest)
		linkjax_xmlhttp = new XMLHttpRequest();
		
	var everyLink = getElementsByClass(document, 'linkjax', 'a');
	
	for(var linkID in everyLink)
		everyLink[linkID].onclick = fetchjax;
	
}


function fetchjax() {

	userFuncName = this.getAttribute('rel');
	if( userFuncName == null || userFuncName == '' ) // no function defined, process link normally
		return true;
		
	userFunc = userFuncName;
	
	if(window.ActiveXObject) 
		linkjax_xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	
	if(linkjax_xmlhttp && linkjax_xmlhttp.readyState < 4)
		linkjax_xmlhttp.abort();
	
	linkjax_xmlhttp.onreadystatechange = processjax;
	linkjax_xmlhttp.open("GET", this.href+"&linkjax="+(Math.random()*99999)); // random for IE to stop caching...stupid ie
	linkjax_xmlhttp.send(null);
	
	return false; // AJAX called, tell browser to stop the follow through on the link
	
}

function processjax() {

	if(linkjax_xmlhttp.readyState == 4 && linkjax_xmlhttp.status == 200) {
		callThisFunc = userFunc+"(linkjax_xmlhttp.responseText, 1)";
		eval(callThisFunc); // success!
	}
		
	if(linkjax_xmlhttp.readyState == 4 && linkjax_xmlhttp.status != 200) {
		callThisFunc = userFunc+"('', 0)";
		eval(callThisFunc); // failed
	}
		
}

addLoadEvent(linkjax);



// addLoadEvent(): care of Simon Willison ( http://simon.incutio.com/ )
function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

// getElementsByClass() care of Dustin Diaz ( http://www.dustindiaz.com/getelementsbyclass )
function getElementsByClass(node,searchClass,tag) {
	var classElements = new Array();
	var els = node.getElementsByTagName(tag); // use "*" for all elements
	var elsLen = els.length;
	var pattern = new RegExp("\\b"+searchClass+"\\b");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

