var loadedobjects	= new Hash();
var matchbody		= new RegExp('<body[^>]*>([\\S\\s]*?)<\/body>', 'im');
var matchcsss		= new RegExp('import url\\s?\\(\\s?"(.*?)"', 'ig' );
var matchcss		= new RegExp('import url\\s?\\(\\s?"(.*?)"', 'i' );
var matchlinks		= new RegExp('<link.*href\\s?=\\s?"(.*?)"[^>]*>', 'ig' );
var matchlink		= new RegExp('<link.*href\\s?=\\s?"(.*?)"[^>]*>', 'i' );
var matchscripts	= new RegExp('<script.*src\\s?=\\s?"(.*?)"[^>]*>', 'img' );
var matchscript		= new RegExp('<script.*src\\s?=\\s?"(.*?)"[^>]*>', 'im' );
var matchonload		= new RegExp('<body.*onload\\s?=\\s?"(.*?)"[^>]*>', 'i' );

function loadajaxpage(page, containerid)
{
	var meth    = 'get';

	//Display loading image prior to loading content
	$(containerid).innerHTML = '<img src = "/include/images/load_Icon_W2.gif"/>';

	new Ajax.Request(page,
    {
        method:     meth,
        onSuccess:  function(transport){loadpage(transport, containerid);},
        onFailure:  function(){alert('AJAX page request (' + page + ') failed.');}
    });
}

function callajaxquery(query, containerid)
{
	var meth    = 'post',
		server	= 'query.html?',
        sql     = "q=" + query;

    //Display loading image prior to loading content
    $(containerid).innerHTML = '<img src = "/include/images/load_Icon_W2.gif"/>';

    new Ajax.Request(server,
    {
        method:     meth,
        parameters: sql,
        onSuccess:  function(transport){displayquery(transport, containerid);},
        onFailure:  function(){alert('AJAX query (' + query + ') failed.');}
    });
}

function displayquery(page_request, containerid)
{
	var jobj = JSON.parse( page_request.responseText );
	$(containerid).innerHTML = page_request.responseText;
}

function loadpage(page_request, containerid)
{
//try
//{
	var dobjs = loadedobjects.unset( containerid )
	if( dobjs )
	{
//alert( "Removed \"" + containerid + "\" -> \"" + dobjs + "\"" );
		for( var i=0; i<dobjs.length; i++ )
		{
			document.getElementsByTagName("head").item(0).removeChild(dobjs[i]);
		}
	}

	var textFinal = (page_request.responseText.match( matchbody ) || [ "", "NO BODY"] );
	$(containerid).update( textFinal[1] );

	//Extract javascript
	var scripts = page_request.responseText.extractScripts();

	//Extract onload function
	var onld = textFinal[0].match( matchonload );
	if( onld && onld.length == 2 )
		scripts.push( onld[1] );

	//Also find all css and javascript source files to include
	var includes 	= new Array();
	var index		= 0;

	(page_request.responseText.match( matchscripts ) || []).each( function( tag ){ includes[index++] = tag.match( matchscript )[1]; } );
	var cb = new callback( scripts, index );
	(page_request.responseText.match( matchlinks ) || []).each( function( tag ){ includes[index++] = tag.match( matchlink )[1]; } );
	(page_request.responseText.match( matchcsss ) || []).each( function( tag ){ includes[index++] = tag.match( matchcss )[1]; } );
	loadobjs( containerid, includes, cb );
//}
//catch( e )
//{
//	alert ( "OOPS:" + e );
//}
}

function loadobjs( containerid, args, callbackobj )
{
	if( !document.getElementById )
		return;

	var loi = 0;
	var newdobjs = new Array();
	for( var i=0; i<args.length; i++ )
	{
		var file=args[i];
		var fileref="";

		if( file.indexOf(".js") != -1 )
		{ 
			fileref=document.createElement('script');
			fileref.setAttribute("type","text/javascript");
			fileref.setAttribute("src", file);
			fileref.setAttribute("onload", issuecallback( callbackobj, file ) );
		}
		else if( file.indexOf(".css")!=-1 )
		{
			fileref=document.createElement("link");
			fileref.setAttribute("rel", "stylesheet");
			fileref.setAttribute("type", "text/css");
			fileref.setAttribute("href", file);
		}

		if (fileref!="")
		{
			document.getElementsByTagName("head").item(0).appendChild(fileref);
			newdobjs[loi++] = fileref;
		}
	}
	loadedobjects.set( containerid, newdobjs );
	//alert( "Added \"" + containerid + "\" -> \"" + newdobjs+ "\"" );
}

