﻿/******************************************************************************************************
* AJAX routines
******************************************************************************************************/
AjaxRequestCollection		= new Array();

//****************************** Submit Page (PUBLIC)
function SubmitPage(sURL, CallBackFunction) {
    var bRtn    = false;

	CallBackFunction = (!CallBackFunction) ? 'AJaxReturn' : CallBackFunction;

    if(!PageRunning)
    {
        try
        {
            if(!AjaxPostRequest('SubmitPage', 'AJaxReturn', sURL, true, '', ''))
            {
                //processingStatus(false);
                alert("Couldn't process request.  Please try again");
            }
        }
        catch (e)
        {
            //processingStatus(false);
            alert("Couldn't process request.  Please try again");
        }
    }
}

//****************************** Make AJAX GET request (PUBLIC)

function AjaxGetRequest( sRequestId, sCallBackFunction, sUrl )
{
	return AjaxMakeRequest( sRequestId, sCallBackFunction, sUrl, true, null, null, false, null, null );
}

//****************************** Make AJAX POST request (PUBLIC)

function AjaxPostRequest( sRequestId, sCallBackFunction, sUrl, bUsePageFormData, sFormName, sCustomFormData )
{
	if ( bUsePageFormData )
	{
		sFormName		= ( !sFormName && document.forms[ 0 ] ) ? document.forms[ 0 ].name : sFormName;
		bUsePageFormData	= ( bUsePageFormData && sFormName );
	}

	sCustomFormData	= ( !sFormName ) ? sCustomFormData : null;

	return AjaxMakeRequest( sRequestId, sCallBackFunction, sUrl, true, null, null, true, sFormName, sCustomFormData );
}

//****************************** Make AJAX request (PRIVATE)

function AjaxMakeRequest( sRequestId, sCallBackFunction, sUrl, bAsyncronous, sUsername, sPassword, bPost, sFormName, sFormData )
{
	var	bInstantiated	= false;
	var	hHandler	= new Function( 'AjaxResponseHandler( \'' + sRequestId + '\', \'' + sCallBackFunction + '\' );' );

	if ( InternetExplorer )
	{
		try
		{
			AjaxRequestCollection[ sRequestId ]	= new ActiveXObject( 'Msxml2.XMLHTTP' );
			bInstantiated				= true;
		}

		catch ( e )
		{

		}

		if ( !bInstantiated )
		{
			try
			{
				AjaxRequestCollection[ sRequestId ]	= new ActiveXObject( 'Microsoft.XMLHTTP' );
				bInstantiated				= true;
			}

			catch ( e )
			{

			}
		}

		if ( bInstantiated )
		{
			AjaxRequestCollection[ sRequestId ].onreadystatechange	= hHandler;
		}
	}
	else
	{
		try
		{
			AjaxRequestCollection[ sRequestId ]		= new XMLHttpRequest();
			bInstantiated					= true;
		}

		catch ( e )
		{

		}

		if ( bInstantiated )
		{
			AjaxRequestCollection[ sRequestId ].onload	= hHandler;
			AjaxRequestCollection[ sRequestId ].onerror	= hHandler;
		}
	}

	if ( !bInstantiated )
	{
		return false;
	}

	var	sMethod		= 'GET';
	var	sEncoding	= 'text/html';
	var	sForm		= null;
	var	oElement;
	var	oOption;
	var	sType;
	var	bSelect;
	var	iSelected;

	if ( bPost )
	{
		var	bHasForm	= ( sFormName != null && sFormName != '' );
		var	bHasData	= ( sFormData != null && sFormData != '' );

		if ( bHasForm || bHasData )
		{
			sMethod		= 'POST';
			sEncoding	= 'application/x-www-form-urlencoded';
			sForm		= bHasForm ? '' : sFormData;

			if ( bHasForm )
			{
				var	oElements	= document.forms[ sFormName ].elements;

				for ( var iIndex = 0; iIndex < oElements.length; iIndex++ )
				{
					oElement	= oElements[ iIndex ];

					if ( oElement.disabled )
					{
						continue;
					}
					
                    if(oElement.name.substring(0, 2) == "__")
                    {
						continue;
                    }

					sType	= oElement.type;
					bSelect	= ( sType.indexOf( 'select' ) > -1 );

					if ( ( sType == 'checkbox' || sType == 'radio' ) && !oElement.checked )
					{
						continue;
					}

					if ( bSelect )
					{
						for ( iSelected = 0; iSelected < oElement.length; iSelected++ )
						{
							oOption	= oElement.options[ iSelected ];

							if ( !oOption.selected )
							{
								continue;
							}

							sForm	+= ( iIndex == 0 ) ? '' : '&';
							sForm	+= oElement.name + '=' + escape( oOption.value );
						}
					}

					else
					{
						sForm	+= ( iIndex == 0 ) ? '' : '&';
						sForm	+= oElement.name + '=' + escape( oElement.value );
					}
				}

				//sForm	+= '\n';
			}
		}
	}
    
    //processingStatus(true);
    
	try
	{
		AjaxRequestCollection[ sRequestId ].open( sMethod, sUrl, bAsyncronous, sUsername, sPassword );
		AjaxRequestCollection[ sRequestId ].setRequestHeader( 'Content-Type', sEncoding );
		AjaxRequestCollection[ sRequestId ].send( sForm );
	}

	catch ( e )
	{
		return false;
	}

	return true;
}

//****************************** Handle AJAX responses (PRIVATE)

function AjaxResponseHandler( sRequestId, sCallBackFunction )
{
    if ( AjaxRequestCollection[ sRequestId ].readyState == 4 || AjaxRequestCollection[ sRequestId ].readyState == 'complete' )
    {
        eval( sCallBackFunction + '( \'' + sRequestId + '\', AjaxRequestCollection[ sRequestId ].responseText )' );
        AjaxRequestCollection[ sRequestId ] = null;
    }
}

//****************************** Load Xml Document (PUBLIC)
function LoadXmlDocument(xmlFile, sCallBackFunction)
{
   var objXMLDOM;

   if( InternetExplorer )
   {
        objXMLDOM = new ActiveXObject("Microsoft.XMLDOM");

        objXMLDOM.async = false;
        objXMLDOM.loadXML(xmlFile);

        sCallBackFunction(objXMLDOM);

        return true;
   }
   else if(document.implementation && document.implementation.createDocument)
   {
        xmlFile = xmlFile.substring(xmlFile.lastIndexOf("?")+2, xmlFile.length);
        var parser = new DOMParser();
        var objXMLDOM = parser.parseFromString(xmlFile, "text/xml");

        sCallBackFunction(objXMLDOM);

        return true;
   }
   else
   {
      return false;
   }
}

//****************************** AJax Return (PRIVATE)
function AJaxReturn(RequestId, ReturnValue)
{
    processingStatus(false);

    if(ReturnValue.substring(0, 5) == 'Error')
    {
        ResultError(ReturnValue);
    }
    else
    {
        LoadXmlDocument(ReturnValue, UpdateResults)
    }
}


//****************************** Get SingleNode (PRIVATE)
function GetSingleNode(xPath, objXMLDOM)
{

    if( InternetExplorer )
    {
        return objXMLDOM.selectSingleNode(xPath).text;
    }
    else
    {
        var oEvaluator = new XPathEvaluator();
        var oResult = oEvaluator.evaluate(xPath, objXMLDOM, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
        return oResult.singleNodeValue.textContent; 
    }
}

//****************************** Update Results (PRIVATE)
function UpdateResults(xmlSoapReturn)
{   
    var sQry;
    var sType;
    var JSFunction;

    try
    {
        sQry = "MFC/JSFunction"
        JSFunction = GetSingleNode(sQry, xmlSoapReturn); 

        sQry = "MFC/ResponseType"
        sType = GetSingleNode(sQry, xmlSoapReturn); 
        
        if(sType == "ERROR")
        {
            sQry = "MFC/ResponseMsg"
            ResultError(GetSingleNode(sQry, xmlSoapReturn));
        }
        else if(sType == "STRING")
        {
            sQry = "MFC/ResponseMsg"
            eval(JSFunction + '( \'' + GetSingleNode(sQry, xmlSoapReturn) + '\')');
            //alert(GetSingleNode(sQry, xmlSoapReturn));
        }
        else if(sType == "HTML")
        {
            sQry = "MFC/ResponseMsg"
            alert(GetSingleNode(sQry, xmlSoapReturn));
        }
        else if(sType == "LIST")
        {
            sQry = "MFC/ResponseMsg"
            alert(GetSingleNode(sQry, xmlSoapReturn));
        }
        else if(sType == "XML")
        {
        /*
        //Remove soap and get payload
        strQuery = "SPLITE:Envelope/SPLITE:Body/MethodResponse/Payload";
        try
        {
                    xmlPayLoad = objXMLDOM.selectSingleNode(strQuery).xml;
        }
        catch(e)
        {
                    alert("Error: Payload is Empty.");
        }
        //Load Payload
        objXMLDOM.loadXML(xmlPayLoad);
        //Search for Errors
        try
        {
                    xmlFields = objXMLDOM.selectNodes("Payload/Baderror");
        }
        catch(e)
        {
                    bErrors = false;
        }
        if(xmlFields.length == 0) { bErrors = false; }
        if(bErrors)
        {
                    for(x=0;x<xmlFields.length;x++)
                    {
                                //Get Error
                                if(xmlFields.item(x).attributes.getNamedItem("name").text == "error")
                                {
                                            strErrors = xmlFields.item(x).attributes.getNamedItem("value").text;
                                }
                    }
                    alert("Error: " + strErrors);
        }
        else
        {
                    //Get Close Date, UpdateResults
                    try
                    {
                                xmlFields = objXMLDOM.selectNodes("Payload/Field");
                    }
                    catch(e)
                    {
                                alert("Error: Can not getting Fields node.");
                    }
                    for(x=0;x<xmlFields.length;x++)
                    {
                                //Get Close Date
                                if(xmlFields.item(x).attributes.getNamedItem("name").text == "closed_date")
                                {
                                            dtCloseDate = xmlFields.item(x).attributes.getNamedItem("value").text;
                                }
                                //Get Check Update value
                                if(xmlFields.item(x).attributes.getNamedItem("name").text == "UpdateResult")
                                {
                                            bUpdated = xmlFields.item(x).attributes.getNamedItem("value").text;
                                }
                                //Get Project ID value
                                if(xmlFields.item(x).attributes.getNamedItem("name").text == "projectId")
                                {
                                            intProjectID = xmlFields.item(x).attributes.getNamedItem("value").text;
                                }
                    }
        }
        */
        }
        else
        {
        }
    }
    catch (e)
    {
        alert("Error: Reading Results - " + e.description);
    }
}

//****************************** Error Results (PUBLIC)
function ResultError(oResult)
{
    alert(oResult);
}

//****************************** End file

