/////////////////////AJAX TRANSPORT FUNCTIONS///////////////////////////////
	/*
		Author: Marc E. Eble



		Depends: This Library requires prototypes.js



		Functions:

		SEND_DOGET: sends a get request and calls a handler with the response.

		SYNTAX:		send_doGet(@url, @fnc);

		PARAMETERS: @url -> required. the url for the get request
					@fnc -> required. the name of the function to call when the response is ready*

					*event object is available in the xmlHttp object.



		SEND_DOPOST: [todo]

	*/

    var xmlHttp;

    var ajaxQueueManager = new Array();
    	ajaxQueueManager["GET"] = new Object();
		ajaxQueueManager["GET"].ready = true;
		ajaxQueueManager["GET"].urlArray = new Array();
		ajaxQueueManager["GET"].fncArray = new Array();
	ajaxQueueManager["POST"] = new Object();
		ajaxQueueManager["POST"].ready = true;
		ajaxQueueManager["POST"].actionArray = new Array();
		ajaxQueueManager["POST"].urlArray = new Array();
		ajaxQueueManager["POST"].argsArray = new Array();
		ajaxQueueManager["POST"].fncArray = new Array();

	function send_doGet(url, fnc)
	{
		var defaultHandler = function()
		{
			if(xmlHttp.readyState == 4 || xmlHttp.readyState == 'complete')
			{
				ajaxQueueManager["GET"].ready = true;
				parseJS();
				fnc();
			}
		};

		ajaxQueueManager["GET"].urlArray.push(url);
		ajaxQueueManager["GET"].fncArray.push(defaultHandler);

		var checkQueueFnc = function(){
				if(ajaxQueueManager["GET"].ready == true)
				{
					ajaxQueueManager["GET"].ready = false;
					xmlHttp_doGet(ajaxQueueManager["GET"].urlArray.bottom(), ajaxQueueManager["GET"].fncArray.bottom());

				}
				else
				{
					setTimeout(checkQueueFnc, 500);
				}
			};

		checkQueueFnc();

	}
	
    function send_doPost(url, args, fnc)
    {
		var defaultHandler = function()
		{
			if(xmlHttp.readyState == 4 || xmlHttp.readyState == 'complete')
			{
				ajaxQueueManager["POST"].ready = true;
				
				parseJS();
				
				fnc();
			}
		};
		
		ajaxQueueManager["POST"].urlArray.push(url);
		ajaxQueueManager["POST"].fncArray.push(defaultHandler);
		ajaxQueueManager["POST"].argsArray.push(args);
		
		var checkQueueFnc = function(){
			if(ajaxQueueManager["POST"].ready == true)
			{
				ajaxQueueManager["POST"].ready = false;
				xmlHttp_doPost(ajaxQueueManager["POST"].urlArray.bottom(), ajaxQueueManager["POST"].argsArray.bottom(), ajaxQueueManager["POST"].fncArray.bottom());
			}
			else
			{
				setTimeout(checkQueueFnc, 500);
			}
		};
    	checkQueueFnc();
    }

    function parseJS()
    {
	try{
		var response = xmlHttp.responseText;
		var __xmlDoc;
		if(window.ActiveXObject)
		{
		    __xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
			__xmlDoc.async = "false";
			__xmlDoc.loadXML(response);

			var html = __xmlDoc.documentElement;
		}
		else
		{
			var __xmlParser = new DOMParser();
			    __xmlDoc = __xmlParser.parseFromString(response, "text/xml");
		}
		
		var __jsText = html.getElementsByTagName("script");

		for(i = 0; i < __jsText.length; i++)
		{
			if(__jsText[i].getAttribute("src") == null)
			{
					//TODO: Some how fix this so it keeps the tags
				var __tmpStr = __jsText[i].text.replace(/%3C/gi, "<");
				    __tmpStr = __tmpStr.replace(/%3E/gi, ">");

				eval(__tmpStr);
			}
			else
			{
				//TODO: Make This Work!
			//	var __script = document.createElement('script');
			//	    __script.type = 'text/javascript';
			//	    __script.src = __jsText[i].getAttribute("src");
			//	document.getElementsByTagName('head')[0].appendChild(__script);
			}
		}

	}catch(e){}
    }
    
    function xmlHttp_doPost(action, args, callbackfunction)
    {
        xmlHttp = getXmlHttpObject(callbackfunction);

        xmlHttp.open('POST', action, true);
        xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
        xmlHttp.send(args);
    }

    function xmlHttp_doGet(action, callbackfunction)
    {
    	xmlHttp = getXmlHttpObject(callbackfunction);
    	xmlHttp.open('GET', action, true);
    	xmlHttp.send(null);
    }

    function getXmlHttpObject(handler)
    {
        var objXmlHttp = null;
        if(window.XMLHttpRequest) //NON IE
        {
            objXmlHttp = new XMLHttpRequest();
            objXmlHttp.onreadystatechange = handler;
        }
        else if(window.ActiveXObject)
        {
            try{ //IE
                objXmlHttp = new ActiveXObject('Msxml2.XMLHTTP');
                objXmlHttp.onreadystatechange = handler;
            }
            catch(ex)
            {

                try{ //OLD IE
                    objXmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
                    objXmlHttp.onreadystatechange = handler;
                 }
                 catch(e) //The user just sucks
                 {
                    alert(e + " You may need to update your browser or configure your security settings.");
                 }
            }
         }
         return objXmlHttp;
     }



    function stateChangeHandler()
    {
        if(xmlHttp.readyState == 4 || xmlHttp.readyState == 'complete')
        {
            var strResponse = xmlHttp.responseText;
             //alert(strResponse);//<-dont do this
              var response = xmlHttp.responseXML.documentElement;

			//var newwin = window.open("", "newhandler");

			//newwin.document.write(strResponse);

        }
    }

	/*function for submiting forms*/
	
    function getFormArgs(o)
    {
    	if(o != "")
    	{
    		var inputs = o.getElementsByTagName('input');
    		var textAreas = o.getElementsByTagName('TEXTAREA');
    	}
    	else
    	{
    		var inputs = document.getElementsByTagName('input');
    		var textAreas = document.getElementsByTagName('TEXTAREA');
    	}
    	
    	var argStr = "";
    	for(i=0; i<inputs.length;i++)
    	{
    		if(inputs[i].name != "")
    		{
    			if(i > 0)
    			{
    				argStr += "&";
    			}
    			
    			argStr += inputs[i].name + "=" + inputs[i].value;
    		}
    	}
    	
       	for(i=0; i<textAreas.length;i++)
    	{
    		if(textAreas[i].name != "")
    		{
    			if(i > 0 || argStr.length > 1)
    			{
    				argStr += "&";
    			}
    			
    			argStr += textAreas[i].name + "=" + textAreas[i].value;
    		}
    	}
    	
    	return argStr;
    }

////////////////////////////////////////////////////////////////////////////////////
     function __Refresh(){
     	window.history.go(0);
     }
     

	 function __DebugHandler()
	 {
	     if(xmlHttp.readyState == 4 || xmlHttp.readyState == 'complete')
	     {
		 var strResponse = xmlHttp.responseText;
		  //alert(strResponse);//<-dont do this
		   var response = xmlHttp.responseXML.documentElement;

			var newwin = window.open("", "newhandler");

			newwin.document.write(strResponse);

	     }
	 }
