<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Test content loader</title>
<script type="text/javascript">
	var djConfig = {isDebug: true};
	djConfig.debugAtAllCosts = true;
</script>
<script type="text/javascript" src="../../dojo.js"></script>
<script language="JavaScript" type="text/javascript">
	dojo.require("dojo.widget.*");
	dojo.require("dojo.widget.html.loader");
	dojo.require("dojo.lang.assert");
	dojo.hostenv.writeIncludes();
</script>
<script>
	var postCreate = false;
	var show = false;
	var del = false;
	
	// make a custom widget
	dojo.widget.defineWidget(
		"dojo.widget.testLoader",
		dojo.widget.HtmlWidget,
		function(){
			dojo.widget.html.loader.hookUp({widget: this});
		},
		{
			isContainer: true,
 
			// should still fire these 3 functions
			postCreate: function(){
				// test infinites loop
				dojo.debug("postCreate "+this.widgetId);
				this.constructor.superclass.postCreate.apply(this, arguments);
				postCreate = true;
			},
			show: function(){
				// test infinites loop
				dojo.debug("show "+this.widgetId);
				this.constructor.superclass.show.apply(this, arguments);
				show = true;
			},
			destroy: function(){
				// test inifinite loop
				dojo.debug("destroy "+this.widgetId);
				this.constructor.superclass.destroy.apply(this, arguments);
				del = true;
			}
		}
	);


	dojo.addOnLoad(function(){
		try{
			var isFunc = dojo.lang.isFunction;
			var unDef = dojo.lang.isUndefined;
			var a = dojo.lang.assert;
			var mess = " wrong type, not a func";
			var messu = " wrong type, is undefined";
			var w = dojo.widget.byId("test");
			var cont = "This content should abort our doc0.html initial href, aka this should win"
			w.setContent(cont);dojo.debug("here");
			
			dojo.debug("start testing");
			// test functions
			a(isFunc(w.setContent), "setContent"+mess);
			a(isFunc(w.setUrl), "setUrl"+mess);
			a(isFunc(w.loadContents, "loadContents"+mess));
			a((postCreate==true), "widget specific postCreate not called");
	
			w.show();
	
			a((show==true), "widget specific show not called");
			a(isFunc(w.refresh), "refresh"+mess);
			a(isFunc(w.abort), "abort"+mess);
			a(isFunc(w.onLoad), "onLoad"+mess);
			a(isFunc(w.onUnLoad), "onUnLoad"+mess);
			a(isFunc(w.addOnLoad), "addOnLoad"+mess);
			a(isFunc(w.addOnUnLoad), "addOnUnLoad"+mess);
			a(isFunc(w.onDownloadStart), "onDownloadStart"+mess);
			a(isFunc(w.onDownloadEnd), "onDownloadEnd"+mess);
			a(isFunc(w.onDownloadError), "onDownloadError"+mess);
			a(isFunc(w.onExecError), "onExecError"+mess);
			a(isFunc(w.onSetContent), "onSetContent"+mess);
			a(isFunc(w.onContentParse), "onContentParse"+mess);
			a(isFunc(w.onExecScript), "onExecScript"+mess);
			a(isFunc(w.setHandler), "setHandler"+mess);
			a((typeof w.loader == 'object'), "loader object wasent found")
			// test properties
			a(!unDef(w.adjustPaths), "adjustPaths"+messu);
			a(!unDef(w.href), "href"+messu);
			a(!unDef(w.extractContent), "extractContent"+messu);
			a(!unDef(w.parseContent), "parseContent"+messu);
			a(!unDef(w.cacheContent), "cacheContent"+messu);
			a(!unDef(w.bindArgs), "bindArgs"+messu);
			a(!unDef(w.preload), "preload"+messu);
			a(!unDef(w.refreshOnShow), "refreshOnShow"+messu);
			a(!unDef(w.handler), "handler"+messu);
			a(!unDef(w.trackHistory), "trackHistory"+messu);
			a(!unDef(w.executeScripts), "executeScripts"+messu);
			a(!unDef(w.scriptScope), "scriptScope"+messu);
			// make sure we havent calles destroy yet
			a((del==false), "destroy called prematurely");
			// now make sure we have aborted href load
			a((w.domNode.innerHTML==cont), cont+" wasnt set, or overriden by a async call");
			a((w.href==""), "href!='', setContent should clear href");
	
			dojo.debug("Testing to unHook")
			// dettach loader form our widget
			w.loader.unHook();
			// let the browser do its stuff
	
			// make sure it cleaned up after itself
			// test functions
			mess = " isnt cleared on loader.unHook()";
			messu = " wrong type should be undefined";
			a(!isFunc(w.setContent), "setContent"+mess);
			a(!isFunc(w.setUrl), "setUrl"+mess);
			a(!isFunc(w.loadContents, "loadContents"+mess));
			a(!isFunc(w.refresh), "refresh"+mess);
			a(!isFunc(w.abort), "abort"+mess);
			a(!isFunc(w.onLoad), "onLoad"+mess);
			a(!isFunc(w.onUnLoad), "onUnLoad"+mess);
			a(!isFunc(w.addOnLoad), "addOnLoad"+mess);
			a(!isFunc(w.addOnUnLoad), "addOnUnLoad"+mess);
			a(!isFunc(w.onDownloadStart), "onDownloadStart"+mess);
			a(!isFunc(w.onDownloadEnd), "onDownloadEnd"+mess);
			a(!isFunc(w.onDownloadError), "onDownloadError"+mess);
			a(!isFunc(w.onExecError), "onExecError"+mess);
			a(!isFunc(w.onSetContent), "onSetContent"+mess);
			a(!isFunc(w.onContentParse), "onContentParse"+mess);
			a(!isFunc(w.onExecScript), "onExecScript"+mess);
			a(!isFunc(w.setHandler), "setHandler"+mess);;
			a(unDef(w.loader), "loader object"+mess);
	
			// test properties
	// 		a(unDef(w.adjustPaths), "adjustPaths"+messu); // cant make these work
	// 		a(unDef(w.href), "href"+messu);
			a(unDef(w.extractContent), "extractContent"+messu);
			a(unDef(w.parseContent), "parseContent"+messu);
			a(unDef(w.cacheContent), "cacheContent"+messu);
			a(unDef(w.bindArgs), "bindArgs"+messu);
			a(unDef(w.preload), "preload"+messu);
			a(unDef(w.refreshOnShow), "refreshOnShow"+messu);
			a(unDef(w.handler), "handler"+messu);
			a(unDef(w.trackHistory), "trackHistory"+messu);
			a(unDef(w.executeScripts), "executeScripts"+messu);
			a(unDef(w.scriptScope), "scriptScope"+messu);
	
			// make sure we havent calles destroy yet
			a((del==false), "destroy called prematurely");
	
			// now make sure we have aborted href load
			a((w.domNode.innerHTML==cont), cont+" unhook affected innerHTML");
	
			// destroy our widget
			w.destroy();
			a((del==true), "destroy wasent called");
			var div = dojo.byId("status");
			div.innerHTML = "<p>Success!</p>"
			div.style.backgroundColor = "green";
		}catch(e){dojo.debug("error: "+e)}
	});
</script>

</head>
<body>
	<h1>Test for loader (base class for ContentPane etc.)</h1>
	<h2>Experimental!</h2>
	<div dojoType="testLoader" widgetId="test" href="doc0.html" style="border: 2px dashed red;">this is a widget</div>

	<div id="status" style="text-align: center; font-size: 16pt; background-color: red">If test passes this gets green</div>
</body>
</html>