
function Hijax()
	{
		var container,url,canvas,data,loading,callback,request;

		this.setContainer = function( value ) { container = value; }; // END METHOD
		this.setUrl = function( value ) { url = value; }; // END METHOD
		this.setCanvas = function( value ) { canvas = value; }; // END METHOD
		this.setLoading = function( value ) { loading = value; }; // END METHOD
		this.setCallback = function( value ) { callback = value; }; // END METHOD


		this.captureData = function()
			{
				if ( container.nodeName.toLowerCase() == "form" )
					{
// alert( "captureData sees that the container's node name is 'form', setting onsubmit ..." );

						container.onsubmit = function()
							{
// alert( "form submit" );
								var query = "";

								for ( var i = 0; i < this.elements.length; i++ )
									{
										if ( !this.elements[i].disabled && ( this.elements[i].type != 'radio' || ( this.elements[i].type == 'radio' && this.elements[i].checked )))
											{
												query += this.elements[i].name;
												query += "=";
												query += escape( this.elements[i].value );
												query += "&";
											}
									}

								data = query + "ajax=true";
// alert( "captureData set data to: " + data );

								return !start();
							};
					}
				else
					{
						var links = container.getElementsByTagName( "a" );

						for ( var i = 0; i < links.length; i++ )
							{
								if ( links[i].className.match( "ajax" ))
									{
// alert( "captureData initiating a link with className of: " + links[i].className );
										links[i].onclick = function()
											{
												var query = this.getAttribute( "href" ).split( "?" )[1];
												url += "?" + query + "&ajax=true";
		
												return !start();
											};
									}
							}

						links = null;
					}

			}; // END METHOD


		var start = function()
			{
				request = getHTTPObject();

				if ( !request || !url )
					{
						return false;
					}
				else
					{
						initiateRequest();
						return true;
					}

			}; // END METHOD


		var getHTTPObject = function()
			{
// alert( "getHTTPObject called." );

				var xmlhttp = false;

				if ( window.XMLHttpRequest )
					{
						xmlhttp = new XMLHttpRequest();
					}
				else if( window.ActiveXObject )
					{
						try
							{
								xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
							}
						catch (e)
							{
								try
									{
										xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
									}
								catch (e)
									{
										xmlhttp = false;
									}
							}
					}

// alert( "getHTTPObject is returning: " + xmlhttp );

				return xmlhttp;

			}; // END METHOD


		var initiateRequest = function()
			{
				if ( loading ) loading();

				request.onreadystatechange = completeRequest;

				if ( data )
					{
						request.open( "POST", url, true );
						request.setRequestHeader( "Content-Type","application/x-www-form-urlencoded" );
// alert( 'initiateRequest sending data: ' + data );
						request.send( data );
					}
				else
					{
						request.open( "GET", url, true );
						request.send( null );
					}

			}; // END METHOD


		var completeRequest = function()
			{
				if ( request.readyState == 4 )
					{
						if ( request.status == 200 || request.status == 304 )
							{
								if ( canvas ) canvas.innerHTML = request.responseText;
								if ( callback ) callback();
							}
					}

			}; // END METHOD

	} // END CLASS


function content()
	{
		var prepareElement = function( element, canvas )
			{
// alert( "prepareElement called with element: " + element.name );

				var xhr = new Hijax();

				xhr.setContainer( element );
				xhr.setUrl( window.location.href.split( "?" )[0] );
				xhr.setCanvas( document.getElementById( canvas ));

				xhr.setLoading( function() { displayLoading( document.getElementById( "search_result" )); });
				xhr.setCallback( function() { content(); });

				xhr.captureData();

			}; // END METHOD


		var displayLoading = function( element )
			{
				if ( element.id ) element.innerHTML = '<img src="http://localhost/ilearn/media/icons/processing/128_dark.gif" height="128" width="128" border="0" alt="LOADING ..." />LOADING ...';

			}; // END METHOD


		var fadeUp = function( element, red, green, blue )
			{
				if ( element.fade ) clearTimeout( element.fade );

				element.style.backgroundColor = "rgb("+red+","+green+","+blue+")";

				if ( red >= 255 && green >= 251 && blue >= 251 )
					{	
						element.style.backgroundColor = "rgb(255,251,251)";
						return;
					}

				var newred = red + Math.ceil(( 255 - red ) / 10 );
				var newgreen = green + Math.ceil(( 251 - green ) / 10 );
				var newblue = blue + Math.ceil(( 251 - blue ) / 10 );

				var repeat = function() { fadeUp( element, newred, newgreen, newblue ) };

				element.fade = setTimeout( repeat, 100 );

			}; // END METHOD


	// CONFIGURE FORMS:
		var all_forms = document.getElementsByTagName( "form" );

		for ( var i = 0; i < all_forms.length; i++ )
			{
				if ( all_forms[i].className.match( "ajax_form" )) prepareElement( all_forms[i], "content" );
			}

		all_forms = null; // CLEAN UP FOR IE


	// CONFIGURE SELECTS:
		var all_selects = document.getElementsByTagName( "select" );

		for ( var i = 0; i < all_selects.length; i++ )
			{
				if ( all_selects[i].className.match( "ajax_select" )) prepareElement( all_selects[i], "content" );
			}

		all_selects = null; // CLEAN UP FOR IE


	// CONFIGURE LINKS:
		var ajax_divs = document.getElementsByTagName( "div" );

		for ( var i = 0; i < ajax_divs.length; i++ )
			{
				if ( ajax_divs[i].className.match( "ajax_div" )) prepareElement( ajax_divs[i], "content" );
			}

		ajax_divs = null; // CLEAN UP FOR IE

	} // END CLASS


window.onload = content;
