if (!window.IBDOM) {
	alert("please include ibdom.js *before* ibdom_tests.js");
}

IBDOM.test = {
		Utils: {
			run_tests: function() {
			/* stub function */
			}
			,
			output: function() {
				if (arguments[0]) {
					if (oEl = IBDOM.Utils.getElement("testOutput")) {
						oEl.setTextData(IBDOM.Utils.getString([oEl.getTextData(),arguments[0],"\r*****************\r"]));
					} else {
						alert(arguments[0])
					}
				}
			}//output method
		}//Utils
		,
		Beans: {
			One: {
				one: "THIS IS ONE",
				two: "THIS IS TWO",
				three: "THIS IS THREE",
				four: "THIS IS FOUR",
				five: 3.14159265359,
				six: 4815162342,
				seven: 4815162342.14159265359
				/*
					four .. eight ..
					fifteen sixteen
					twenty-three ...
					fourty-two!
					EXECUTE!
				*/
			},
			Two: {
				one: "THIS IS ONE - ROUND 2",
				two: "THIS IS TWO - ROUND 2",
				three: "THIS IS THREE - ROUND 2",
				four: "THIS IS FOUR - ROUND 2",
				five: 1113.14159265359,
				six: 1114815162342,
				seven: 1114815162342.14159265359
			}
			,
			VehicleTable: {
				summary:"5 vehicles were found!",
				lastUpdated:(new Date()).toGMTString()
			}
		}//Beans
		,
		Collections: {
			Vehicles: [
				{
					year:2002,
					make:"BMW",
					model:"325i",
					price:48151.62342,
					vehicleUrl:"http://www.bmwusa.com/"
				}
				,
				{
					year:2003,
					make:"Jeep",
					model:"Liberty",
					price:48151.62342,
					vehicleUrl:"http://www.jeep.com/"
				}
			],
			Vehicles2: [
				{
					year:2003,
					make:"Jeep",
					model:"Liberty",
					price:48151.62342,
					vehicleUrl:"http://www.jeep.com/"
				}
				,
				{
					year:2002,
					make:"BMW",
					model:"325i",
					price:48151.62342,
					vehicleUrl:"http://www.bmwusa.com/"
				}
			]
		}//Collections
}//IBDOM.test package

function my_tests() {

	/* start test: adding an Element method and using it */
	IBDOM.IBElement.methods["doSomething"] = function() {
		IBDOM.test.Utils.output("DOING SOMETHING: " + this);
	};
	$e("bleh").doSomething();
	/* end test: adding an Element method and using it */

	$e("bleh").setClassValue("THIS_IS_A_TEST_CLASS");
	IBDOM.test.Utils.output($e("bleh").className);
	$e("bleh").unsetClassValue("three");
	IBDOM.test.Utils.output($e("bleh").className);
	$e("bleh").setClassValue("YET_ANOTHER_TEST_CLASS");
	IBDOM.test.Utils.output($e("bleh").className);
	$e("bleh").unsetClassValue("THIS_IS_A_TEST_CLASS");
	IBDOM.test.Utils.output($e("bleh").className);
	IBDOM.test.Utils.output($e("bleh").gEBTN("h1").length);
	IBDOM.test.Utils.output($e("bleh").gFEBTN("h1").innerHTML);
	IBDOM.test.Utils.output($e("bleh").cloneNode(true));
	IBDOM.test.Utils.output(doc.gEBCN("foo"));
	IBDOM.test.Utils.output(doc._IB_AUGMENTED);
	IBDOM.test.Utils.output($e("populateMe").setDataProcessor(
		function() {
			bean = arguments[0];
			s = new IBDOM.Utils.StringBuffer();
			s.append("\r==== BEAN INFORMATION ====\r");
			for (p in bean) {
				s.append("\r");
				s.append(p);
				s.append(": ");
				s.append(bean[p]);
			}
			IBDOM.test.Utils.output(s.toString());
		}
	));
	IBDOM.test.Utils.output($e("populateMe").populateFromDataBean(IBDOM.test.Beans.One));
	IBDOM.test.Utils.output($e("populateMeTwo").populateFromDataBean(IBDOM.test.Beans.One));
	IBDOM.test.Utils.output($e("populateMe").populateFromDataBean(IBDOM.test.Beans.Two));
	IBDOM.test.Utils.output($e("populateMeTwo").populateFromDataBean(IBDOM.test.Beans.Two));
	IBDOM.test.Utils.output($e("numbers").populateFromDataBean(IBDOM.test.Beans.One));
	IBDOM.test.Utils.output($e("numbers").populateFromDataBean(IBDOM.test.Beans.Two));
	IBDOM.test.Utils.output("ABOUT TO POPULATE SOMETABLE");
	IBDOM.test.Utils.output($e("someTable").populateFromDataBean(IBDOM.test.Beans.VehicleTable));
	IBDOM.test.Utils.output("DONE POPULATING SOMETABLE\nTRYING BEAN COLLECTION ONE");
	IBDOM.test.Utils.output($e("someCollection").populateFromBeanCollection(IBDOM.test.Collections.Vehicles));
	IBDOM.test.Utils.output("DONE WITH BEAN COLLECTION ONE");
	IBDOM.test.Utils.output($e("someCollection").populateFromBeanCollection(IBDOM.test.Collections.Vehicles2));
	IBDOM.test.Utils.output($e("someCollection").populateFromBeanCollection(null));
	IBDOM.test.Utils.output($e("someCollection").innerHTML);
	IBDOM.test.Utils.output($e("someCollection").populateFromBeanCollection(IBDOM.test.Collections.Vehicles));
	IBDOM.test.Utils.output($e("someCollection").populateFromBeanCollection(IBDOM.test.Collections.Vehicles2));
	IBDOM.test.Utils.output($e("someCollection").populate(IBDOM.test.Collections.Vehicles));
	IBDOM.test.Utils.output($e("numbers").populate(IBDOM.test.Beans.Two));

	IBDOM.test.Utils.output(IBDOM.Utils.StringSplitMapCache.inspect());	
	IBDOM.test.Utils.output(IBDOM.Templates.Cache.inspect());
	IBDOM.test.Utils.output($e("someElement").setOnlyChild($t("someTemplate").populate(IBDOM.test.Beans.One)));
	IBDOM.test.Utils.output($e("someElement").set($t("someTemplate").populate(IBDOM.test.Beans.One)));
	/* prototype compatibility tests */
	IBDOM.test.Utils.output($("someElement"));
	IBDOM.test.Utils.output($("someElement").hide);
	alert("about to hide!");
	IBDOM.test.Utils.output($("someElement").hide());
	
}//

IBDOM.test.Utils.run_tests = my_tests;
