

// let Flash know when we're ready
dojo.addOnLoad(setLoaded);

var myready;
function setLoaded() {
    myready = true;
}
function isReady() {
    return myready;
}


// finds the swf browser independently
function getAsMovie() {
    if (navigator.appName.indexOf("Microsoft") != -1) {
        return window['asmovie'];
    } else {
        return document['asmovie'];
    }
}



/**
 * Send an ajax request, called from Flash via ExternalInterface
 * 
 * @param params[0] com.iwin.rest.HttpRequest
 */
function sendRequest(params) {
    var TIMEOUT = 45000;

    var sendReq = params[0];
    
    var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
    // Added additional privileges to FF to connect via https	   
    if(!isIE && sendReq.url.indexOf("https")==0)
    {	
	netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
	netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
    } 


    

    try {
        loadFunc = function(res, ioArgs) {
            try {
                // for now assuming we have just this one hardcoded flash movie
                //document['asmovie'][sendReq.success](ioArgs.url, ioArgs.xhr.status, res);
		getAsMovie()[sendReq.success](ioArgs.url, ioArgs.xhr.status, res);
            }
            catch(e) {
		console.error("on_load_exception:"+e.message);
		console.error("error="+e);
		console.error("error.description="+e.description);
		console.error("error.number="+e.number);
		console.error("asmovie="+document['asmovie']);
		console.error("sendReq.success="+sendReq.success);
		console.error("ioArgs.url="+ioArgs.url);
		console.error("ioArgs.xhr.status="+ioArgs.xhr.status);
            }
            return res;
        };
        
        errorFunc = function(res, ioArgs ) {
            try {
                // for local testing, the redirects cause security exceptions, even with policy settings
                // so catch the response status, and manually request the redirect location
                if ( ioArgs.xhr.status.toString().charAt(0) == '3') {
                     var loc = ioArgs.xhr.getResponseHeader("Location");
                     //console.debug("manually redirecting, loc: " + loc);
                     // old method, testing without token
                     sendRequest( [{method:"GET", url: loc, success: sendReq.success, failure: sendReq.failure} ]);
                     return;
                 }
                 else {
                     //document['asmovie'][sendReq.failure](ioArgs.url, ioArgs.xhr.status, res);
		     getAsMovie()[sendReq.failure](ioArgs.url, ioArgs.xhr.status, res);
                 }
            }
            catch(e) {
	        console.error("on_error_exception:"+e.message);
            }
            return res;
        };

        var dojoMethod;
        if (sendReq.method.toLowerCase() == 'get') {
            var aj1 = dojo.xhrGet( {
                url: sendReq.url,
                handleAs: "text", 
                timeout: TIMEOUT,
                load: loadFunc,
                error: errorFunc,
                headers: { "Content-Type" : sendReq.mimeType, "Accept" : sendReq.mimeType }
            });
        }
        else if (sendReq.method.toLowerCase() == 'put') {
            var aj1 = dojo.rawXhrPut( {
                url: sendReq.url,
                handleAs: "text", 
                timeout: TIMEOUT,
                load: loadFunc,
                error: errorFunc,
                headers: { "Content-Type" : sendReq.mimeType, "Accept" : sendReq.mimeType },
                putData: sendReq.postData
            });
        }
        else if (sendReq.method.toLowerCase() == 'post') {
            var aj1 = dojo.rawXhrPost( {
                url: sendReq.url,
                handleAs: "text", 
                timeout: TIMEOUT,
                load: loadFunc,
                error: errorFunc,
                headers: { "Content-Type" : sendReq.mimeType, "Accept" : sendReq.mimeType },
                postData: sendReq.postData
            });
        }
        if (sendReq.method.toLowerCase() == 'delete') {
            var aj1 = dojo.xhrDelete( {
                url: sendReq.url,
                handleAs: "text", 
                timeout: TIMEOUT,
                load: loadFunc,
                error: errorFunc,
                headers: { "Content-Type" : sendReq.mimeType, "Accept" : sendReq.mimeType }
            });
        }
    }
    catch(e) {
	   console.error("common_exception:"+e.message);
    };
    return "ok";
}
