a:8:{s:9:"#provides";s:19:"dojox.io.windowName";s:9:"#resource";s:16:"io/windowName.js";s:19:"dojox.io.windowName";a:2:{s:4:"type";s:6:"Object";s:7:"summary";s:0:"";}s:24:"dojox.io.windowName.send";a:5:{s:4:"type";s:8:"Function";s:10:"parameters";a:2:{s:6:"method";a:2:{s:4:"type";s:6:"String";s:7:"summary";s:50:"The method to use to send the request, GET or POST";}s:4:"args";a:2:{s:4:"type";s:13:"dojo.__IoArgs";s:7:"summary";s:942:"See dojo.xhr

args.authElement: DOMNode?
By providing an authElement, this indicates that windowName should use the
authorized window.name protocol, relying on
the loaded XD resource to return to the provided return URL on completion
of authorization/authentication. The provided authElement will be used to place
the iframe in, so the user can interact with the server resource for authentication
and/or authorization to access the resource.

args.onAuthLoad: Function?
When using authorized access to resources, this function will be called when the
authorization page has been loaded. (When authorization is actually completed,
the deferred callback function is called with the result). The primary use for this
is to make the authElement visible to the user once the resource has loaded
(this can be preferable to showing the iframe while the resource is loading
since it may not require authorization, it may simply return the resource).";}}s:6:"source";s:1041:"		args.url += (args.url.match(/\?/) ? '&' : '?') + "windowname=" + (args.authElement ? "auth" : true); // indicate our desire for window.name communication
		var authElement = args.authElement;
		var cleanup = function(result){
			try{
				// we have to do this to stop the wait cursor in FF 
				var innerDoc = dfd.ioArgs.frame.contentWindow.document;
				innerDoc.write(" ");
				innerDoc.close();
			}catch(e){}
			(authElement || dojo.body()).removeChild(dfd.ioArgs.outerFrame); // clean up
			return result;
		}
		var dfd = dojo._ioSetArgs(args,cleanup,cleanup,cleanup);
		if(args.timeout){
			setTimeout(function(){
					if(dfd.fired == -1){
						dfd.callback(new Error("Timeout"));
					}
				},
				args.timeout
			);
		}
		var self = dojox.io.windowName;
		if(dojo.body()){
			// the DOM is ready
			self._send(dfd, method, authElement, args.onAuthLoad);
		}else{
			// we will wait for the DOM to be ready to proceed
			dojo.addOnLoad(function(){
				self._send(dfd, method, authElement, args.onAuthLoad);
			});
		}
		return dfd;";s:7:"summary";s:150:"Provides secure cross-domain request capability.
Sends a request using an iframe (POST or GET) and reads the response through the
frame's window.name.";s:11:"description";s:1118:"In order to provide a windowname transport accessible resources/web services, a server
should check for the presence of a parameter window.name=true and if a request includes
such a parameter, it should respond to the request with an HTML
document that sets it's window.name to the string that is to be
delivered to the client. For example, if a client makes a window.name request like:

	http://othersite.com/greeting?windowname=true
And server wants to respond to the client with "Hello", it should return an html page:

	<html><script type="text/javascript">
	window.name="Hello";
	</script></html>
One can provide XML or JSON data by simply quoting the data as a string, and parsing the data
on the client.
If you use the authorization window.name protocol, the requester should include an
authElement element in the args, and a request will be created like:

	http://othersite.com/greeting?windowname=auth
And the server can respond like this:

	<html><script type="text/javascript">
	var loc = window.name;
	authorizationButton.onclick = function(){
		window.name="Hello";
		location = loc;
	};
	</script></html>";}s:25:"dojox.io.windowName._send";a:5:{s:4:"type";s:8:"Function";s:10:"parameters";a:4:{s:3:"dfd";a:1:{s:4:"type";s:0:"";}s:6:"method";a:1:{s:4:"type";s:0:"";}s:10:"authTarget";a:1:{s:4:"type";s:0:"";}s:10:"onAuthLoad";a:1:{s:4:"type";s:0:"";}}s:6:"source";s:4175:"		var ioArgs = dfd.ioArgs;
		var frameNum = dojox.io.windowName._frameNum++;
		var sameDomainUrl = (dojo.config["dojoCallbackUrl"]||dojo.moduleUrl("dojo", "resources/blank.html")) + "#" + frameNum;
		var frameName = new dojo._Url(window.location, sameDomainUrl);
		var doc = dojo.doc;
		var frameContainer = authTarget || dojo.body();
		function styleFrame(frame){
			frame.style.width="100%";
			frame.style.height="100%";
			frame.style.border="0px";
		}
		if(dojo.isMoz && ![].reduce){
			// FF2 allows unsafe sibling frame modification,
			// the fix for this is to create nested frames with getters and setters to protect access
			var outerFrame = doc.createElement("iframe");
			styleFrame(outerFrame);
			if(!authTarget){
				outerFrame.style.display='none';
			}
			frameContainer.appendChild(outerFrame);

			
			var firstWindow = outerFrame.contentWindow;
			doc = firstWindow.document;
			doc.write("<html><body margin='0px'><iframe style='width:100%;height:100%;border:0px' name='protectedFrame'></iframe></body></html>");
			doc.close();
			var secondWindow = firstWindow[0]; 
			firstWindow.__defineGetter__(0,function(){});
			firstWindow.__defineGetter__("protectedFrame",function(){});
			doc = secondWindow.document;
			doc.write("<html><body margin='0px'></body></html>");
			doc.close();
			frameContainer = doc.body;
		}


		var frame = ioArgs.frame = frame = doc.createElement(dojo.isIE ? '<iframe name="' + frameName + '" onload="dojox.io.windowName['+frameNum+']()">' : 'iframe');
		styleFrame(frame);
		ioArgs.outerFrame = outerFrame = outerFrame || frame;
		if(!authTarget){
			outerFrame.style.display='none';
		}
		var state = 0;
		function getData(){
			var data = frame.contentWindow.name;
			if(typeof data == 'string'){
				if(data != frameName){
					state = 2; // we are done now
					dfd.ioArgs.hash = frame.contentWindow.location.hash;
					dfd.callback(data);
				}
			}
		}
		dojox.io.windowName[frameNum] = frame.onload = function(){
			try{
				if(!dojo.isMoz && frame.contentWindow.location =='about:blank'){
					// opera and safari will do an onload for about:blank first, we can ignore this first onload
					return;
				}
			}catch(e){
				// if we are in the target domain, frame.contentWindow.location will throw an ignorable error 
			}
			if(!state){
				// we have loaded the target resource, now time to navigate back to our domain so we can read the frame name
				state=1;
				if(authTarget){
					// call the callback so it can make it visible
					if(onAuthLoad){
						onAuthLoad();
					}
				}else{
					// we are doing a synchronous capture, go directly to our same domain URL and retrieve the resource
					frame.contentWindow.location = sameDomainUrl;
				}
			}
			// back to our domain, we should be able to access the frame name now
			try{
				if(state<2){
					getData();
				}
			}
			catch(e){
			}

			
		};
		frame.name = frameName;
		if(method.match(/GET/i)){
			// if it is a GET we can just the iframe our src url
			dojo._ioAddQueryToUrl(ioArgs);
			frame.src = ioArgs.url;
			frameContainer.appendChild(frame);
			if(frame.contentWindow){
				frame.contentWindow.location.replace(ioArgs.url);
			}
		}else if(method.match(/POST/i)){
			// if it is a POST we will build a form to post it
			frameContainer.appendChild(frame);
			var form = dojo.doc.createElement("form");
			dojo.body().appendChild(form);
			var query = dojo.queryToObject(ioArgs.query);
			for(var i in query){
				var values = query[i];
				values = values instanceof Array ? values : [values];
				for(var j = 0; j < values.length; j++){
					// create hidden inputs for all the parameters
					var input = doc.createElement("input");
					input.type = 'hidden';
					input.name = i;
					input.value = values[j];
					form.appendChild(input);
				}
			}
			form.method = 'POST';
			form.action = ioArgs.url;
			form.target = frameName;// connect the form to the iframe

			
			form.submit();
			form.parentNode.removeChild(form);
		}else{
			throw new Error("Method " + method + " not supported with the windowName transport");
		}
		if(frame.contentWindow){
			frame.contentWindow.name = frameName; // IE likes it afterwards
		}";s:7:"private";b:1;s:7:"summary";s:0:"";}s:29:"dojox.io.windowName._frameNum";a:2:{s:7:"private";b:1;s:7:"summary";s:0:"";}s:8:"dojox.io";a:2:{s:4:"type";s:6:"Object";s:7:"summary";s:0:"";}s:5:"dojox";a:2:{s:4:"type";s:6:"Object";s:7:"summary";s:0:"";}}