<!doctype html>
<html>
	<head>
		<title>Origin for data: with inherited http origin to http:</title>
		<style type="text/css">
html, body, iframe { display: block; width: 100%; height: 100%; border: none; margin: 0; padding: 0; }
		</style>
		<script type="text/javascript" src="../resources/crossorigin.sub.js"></script>
		<script type="text/javascript">
window.onload = function () {
	var origin = 'http://'+httpHostMain;
	if( location.href.indexOf(origin+'/') ) {
		document.body.innerHTML = 'This must be tested on '+origin+'/';
		return;
	}
	var datastr =
'<!doctype html>\
<html>\
	<head>\
		<title>Origin for data: with inherited http origin to http:<\/title>\
		<style type="text/css">\
div { height: 100px; width: 100px; background: orange; }\
iframe { width: 500px; height: 120px; border: none; }\
		<\/style>\
		<script type="text/javascript">\
window.onload = function () {\
	var origin = "http://'+httpHostMain+'";\
	document.getElementsByTagName("div")[0].ondragstart = function (e) {\
		e.dataTransfer.effectAllowed = "copy";\
		e.dataTransfer.setData("text","dummy text");\
	};\
	document.getElementsByTagName("span")[0].textContent = origin;\
	var iframe = document.createElement("iframe");\
	iframe.src = "'+location.href.replace(/[^\/]*$/,'HELPER-showorigin.html')+'";\
	document.body.insertBefore(iframe,document.getElementsByTagName("div")[0]);\
};\
		<\/script>\
	<\/head>\
	<body>\
		<p>Drag the orange square onto the blue square and release it. The blue square should be replaced with the text:<br>\
		<span><\/span><\/p>\
		<div draggable="true"></div>\
	<\/body>\
<\/html>';
	var iframe = document.createElement('iframe');
	iframe.src = 'data:text/html,'+escape(datastr);
	document.body.appendChild(iframe);
};
		</script>
	</head>
	<body>

		<noscript><p>Enable JavaScript and reload</p></noscript>

	</body>
</html>
