/*******************************************************************************
* Author: Justin Barlow - www.netlobo.com
* Project Netlobo Ajax v1.1
* the ajaxUpdate( ) function tries to make AJAX operations easier by performing
* many common AJAX related operations in one place. The function will request
* the data from the given "url" and inject it into the html element with the
* given "element" using the element's innerHTML method. This function is most
* useful when the requested "url" returns html formatted text or plain text. The
* "url" does not have to return XML.
* 
* The "options" parameter is an anonymous object which includes the following
* available options:
* 
* params:     Parameters for the requested url in the format p1=1&p2=0&p3=2
* method:     The request method. Can be "get" or "post". Default is "post".
* async:      Toggles asynchronous mode. Default is true.
* startfunc:  A function or list of functions to be called before the AJAX
*             request is made. A list of functions must be separated by the
*             semi-colon like this: "showLoad(); animateText(); hideDiv('bob')".
*             You can pass parameters into the functions.
* endfunc:    A function or list of functions to be called after a successful
*             AJAX request. Uses the same format as "startfunc".
* errorfunc:  A function or list of functions to be called when the AJAX request
*             is unsuccessful. Uses the same format as "startfunc".
* noauthfunc: A function or list of functions to be called when the AJAX request
*             is not authenticated (http status code 403 is encountered). Uses
*             the same format as "startfunc".
* 
* Returns true on success and false on failure.
* 
* Example Usage:
* 
	ajaxUpdate( "rightdiv", "getData.jsp", {
		params:"id=12&AJAX=true",
		method:"post",
		async:true,
		startfunc:"elemOn('loading')",
		endfunc:"elemOff('loading'); elemOn('rightdiv')",
		errorfunc:"ajaxError()",
		noauthfunc:"ajaxNoAuth()" }
	);
* 
*******************************************************************************/
function ajax(element, url, options)
{
	var params = options.params || "";
	var method = options.method || "post";
	var async = options.async;
	if( async == null )
		async = true;
	var startfunc = options.startfunc || "";
	var endfunc = options.endfunc || "";
	var errorfunc = options.errorfunc || "";
	var noauthfunc = options.noauthfunc || "";
	var req = false;
	if( window.XMLHttpRequest )
		req = new XMLHttpRequest();
	else if( window.ActiveXObject )
		req = new ActiveXObject( "Microsoft.XMLHTTP" );
	else
	{
		alert(  "Your browser cannot perform the requested action. "+
				"Either your security settings are too high or your "+
				"browser is outdated. Try the newest version of "+
				"Internet Explorer or Mozilla Firefox." );
		return false;
	}
	if( startfunc != "" )
		eval( startfunc );
	req.onreadystatechange =function()
	{
		if ( req.readyState == 4 ) 
		{
			if ( req.status == 200 )
			{
				if( element != '' )
					document.getElementById(element).innerHTML = req.responseText;
				if( endfunc != "" )
					eval( endfunc );
				return true;
			}
			else
			{
				if( req.status == 403 && noauthfunc != "" )
					eval( noauthfunc );
				else
				{
					if( endfunc != "" )
						eval( endfunc );
					if( errorfunc != "" )
						eval( errorfunc );
				}
				return false;
			}
		}
	};
	if( method == "get" )
	{
		req.open( method, url+( params != "" ? "?"+params : "" ), async );
		//req.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
		req.send(null);
	}
	else
	{
		req.open( method, url, async );
		req.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
		req.send( params );
	}
}

//////////////////////////////////////
//        Project Listing  
//////////////////////////////////////

function get_album(album, start, filter)
{
	ajax("projects_album", "ajax_functions.php", {
		params:"f=get_album&a="+album+"&s="+start+"&filter="+filter,
		method:"get",
		startfunc:"albumLoading()",
		endfunc:"albumComplete()"}
	);
}
function get_project(id, filter)
{
	ajax("project_details", "ajax_functions.php", {
		params:"f=get_project&id="+id+"&filter="+filter,
		method:"get",
		startfunc:"projectLoading()"}
	);
}
function get_project_small(id)
{
	ajax("project_details", "ajax_functions.php", {
		params:"f=get_project_small&id="+id,
		method:"get",
		startfunc:"albumLoading()",
		endfunc:"albumComplete()"}
	);
}

function albumLoading()
{
	document.getElementById("list_loading_indicator").style.display = 'inline';
}
function albumComplete()
{
	document.getElementById("list_loading_indicator").style.display = 'none';
}

function projectLoading()
{
	document.getElementById("project_details").innerHTML = '<img class="details_loading_indicator" src="images/loading.gif" alt="loading..." title="" />';
}
function projectComplete()
{
	document.getElementById("project_loading_indicator").style.display = 'none';
}
