/* $Id: linkjax.js 633 2008-03-29 23:09:29Z foupoudave.devpwsphp $ */
/*
 * 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');
        val = this.getAttribute('id');
        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,val)";
                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();
 	if ( node == null ) node = 'document';
	if ( tag == null ) tag = 'a';
	var els = node.getElementsByTagName(tag); // use "*" for all elements
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++)
	{
		if ( pattern.test(els[i].className) )
		{
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}
