var oXMLHTTP , xmlDoc
var timeOutDelay = 250
var timeOutDelay0 = 400
var attemptMax = 3

var varUrlAddressRequestStr,varCallBack_OK, varCallback_Error
var timeOutDelayMax , timeOutDelayMax_State3 = 10 * 1000 // ms (sec)// data being recieved
var timeOutDelayCount = 0
var attemptNum = 1

//callAjaxPrime2('XXX_URL' , 'callBackFunction' , 'errorFailure' )
function callAjaxPrime2( urlAddressRequestStr , CallBack_OK , Callback_Error ) {
	varCallBack_OK = CallBack_OK
	if (Callback_Error!='') { varCallBack_Error = Callback_Error } else { varCallBack_Error = "errorFailure" }	
	
	varUrlAddressRequestStr = urlAddressRequestStr
	timeOutDelayMax = 4.5 * 1000 // ms (sec)
	
	//////mytestPopup( urlAddressRequestStr )
	//////
	////// alert(urlAddressRequestStr)
	
	if (window.XMLHttpRequest) { // Mozilla, Safari, ...
        oXMLHTTP = new XMLHttpRequest();
        if (oXMLHTTP.overrideMimeType) {
            oXMLHTTP.overrideMimeType('text/xml');
            // See note below about this line
        }
    } 
    else if (window.ActiveXObject) { // IE
        try {
            oXMLHTTP = new ActiveXObject("Msxml2.XMLHTTP");
        } 
        catch (e) {
            try {
                oXMLHTTP = new ActiveXObject("Microsoft.XMLHTTP");
            } 
            catch (e) {}
        }
    }

    if (!oXMLHTTP) {
        alert('Giving up :( Cannot create an XMLHTTP instance');
        return false;
    }
	//oXMLHTTP = new ActiveXObject( "Microsoft.XMLHTTP" )
	oXMLHTTP.open( "GET", urlAddressRequestStr.substring(0,Math.min(2050,urlAddressRequestStr.length)), true )
	oXMLHTTP.send('')	
	checkReadyState('init')	
}
function mytestPopup( url ) { if (url.length != 0) { window.open( url ,'popup','height=800,width=1000,toolbar=yes,directories=yes,menubar=yes,scrollbars=yes,location=yes,status=yes,resizable=yes') } }

function processErrorHandler () {
	if (attemptNum <= attemptMax ) {
		attemptNum += 1
		callAjaxPrime2(varUrlAddressRequestStr , varCallBack_OK , varCallBack_Error)
	}
		else { 
			self.setTimeout(varCallBack_Error+"()", 100 ) //AJerrorHandler( varProcessID , "Error-T") 
		}
} 
function checkReadyState(mode) {
	if (mode == "" ){
		if (oXMLHTTP.readyState == 4 )	{
			if ( oXMLHTTP.status == 200 ) { setOutPageData( oXMLHTTP.responseText ) }
				else { processErrorHandler() }
		}
		else if (oXMLHTTP.readyState == 3 ) {  
			timeOutDelayMax = timeOutDelayMax_State3 
			++timeOutDelayCount
			self.setTimeout("checkReadyState('')", timeOutDelay )
		}
		else if( (timeOutDelay * timeOutDelayCount) > timeOutDelayMax ) { processErrorHandler() }
		else { //alert("State != 4")
			++timeOutDelayCount
			self.setTimeout("checkReadyState('')", timeOutDelay )
		}
	}
	else if ( mode == "init" ) {
		timeOutDelayCount = 0
		self.setTimeout("checkReadyState('')", timeOutDelay0 )
	}
}

function setOutPageData( docXMLHTTP ) {
    // For IE based browsers:
    if (window.ActiveXObject) {
	    xmlDoc = new ActiveXObject("Microsoft.XMLDOM") ;
	}
	// For Mozilla based (standards compliant) browsers:
	else if (document.implementation && document.implementation.createDocument) {
        xmlDoc = document.implementation.createDocument("","doc",null);
    }
	xmlDoc.async = false
	try
	{
	    xmlDoc.loadXML(docXMLHTTP)
	}
	catch(e)
    {
	    try //Firefox, Mozilla, Opera, etc.
        {
            parser=new DOMParser();
            xmlDoc=parser.parseFromString(docXMLHTTP,"text/xml");
        }
        catch(e) {}
    }
	
	if( xmlDoc.getElementsByTagName("xml").length == 1 ) {
		attemptNum = 1 //resets processing error
		if		( xmlDoc.getElementsByTagName('error').length == 0 ) 	{ self.setTimeout(varCallBack_OK+"(xmlDoc)", 100 ) ; } 	// does not use 'error' control ; assume ok
		else if	(xmlDoc.getElementsByTagName('error').item(0).firstChild.nodeValue.toUpperCase() != "SESSIONEXPIRED") { self.setTimeout(varCallBack_OK+"(xmlDoc)", 100 ) } 	// uses 'error' control
		else if (window) { window.location = '/aspx/common/SessionExpiration.aspx' }
		else { alert("The session has expired, please log back into autofunds.com") }
	} 
	else { self.setTimeout(varCallBack_Error+"()", 100 )  }
}
//------------------------------------------------------------------------------------------------
function makeURLready ( str ) {
	str = FixString(str,"%","%25") // <-- Must be 1st
	str = FixString(str,"<","%3C")
	str = FixString(str,">","%3E")
	str = FixString(str,"#","%23")
	str = FixString(str,"{","%7B")
	str = FixString(str,"}","%7D")
	str = FixString(str,"|","%7C")
	str = FixString(str,"^","%5E")
	str = FixString(str,"~","%7E")
	str = FixString(str,"[","%5B")
	str = FixString(str,"]","%5D")
	
	str = FixString(str," ","%20")
	str = FixString(str,"$","%24")
	str = FixString(str,"&","%26")
	str = FixString(str,"+","%2B")
	str = FixString(str,",","%2C")
	str = FixString(str,"/","%2F")
	str = FixString(str,":","%3A")
	str = FixString(str,";","%3B")
	str = FixString(str,"=","%3D")
	str = FixString(str,"?","%3F")
	str = FixString(str,"@","%40")
		
	str = FixString(str,"\n","%0D")
	return str
}
function makeURLready2 ( str ) {
	// This will do only basic encoding ; so that space is conserverd
	str = FixString(str,"%","%25") // <-- Must be 1st
	str = FixString(str,"<","%3C")
	str = FixString(str,">","%3E")
	str = FixString(str,"#","%23")
	str = FixString(str,"{","%7B")
	str = FixString(str,"}","%7D")
	str = FixString(str,"|","%7C")
	str = FixString(str,"^","%5E")
	str = FixString(str,"~","%7E")
	str = FixString(str,"[","%5B")
	str = FixString(str,"]","%5D")

	//str = FixString(str," ","%20")
	str = FixString(str,"$","%24")
	str = FixString(str,"&","%26")
	str = FixString(str,"+","%2B")
	str = FixString(str,",","%2C")
	str = FixString(str,"/","%2F")
	str = FixString(str,":","%3A")
	str = FixString(str,";","%3B")
	str = FixString(str,"=","%3D")
	str = FixString(str,"?","%3F")
	str = FixString(str,"@","%40")
	str = FixString(str,"\n","%0D")
	return str
}
function doesCharExist(str, char) {
	if (str.indexOf(char) > -1 ) { return true }
		else { return false }
}
function FixString(str,char,newStr) {
	if (doesCharExist(str,char)) {
		str = str.replace( char,newStr)
		return FixString(str,char,newStr)
	}
		else { return str }
}

function errorFailure() { alert('Connection Error')	; window.location.reload() }
function callbackError1() { alert('A connection error has occured') 	;}
function outAjax(cin) { window.open(cin,'myTestPage','toolbar=yes, directories=yes, menubar=yes, scrollbars=yes,location=yes,status=yes,resizable=yes') }
