var closeOpenTabs = function (){
//closes all tabs except the last opened
	var tabs = document.getElementById('ext-gen149').children;
	for(var x=1; x<tabs.length-2;x++) {
		var xButton = tabs[x].children[0];
		var clickEv = document.createEvent('MouseEvent');
		clickEv.initEvent('click', true, true);
		xButton.dispatchEvent(clickEv);
	}
};

var isTabHaveContent = function () { //ensure the APP doesnt just display nothin'
	//get the bottom element (start="0")
	var ele = document.getElementById('ext-gen146'); //contains all of the tab panels
	if(ele.children.length > 0) {
		var els = [];
		var count = 0;
		while(count < 50)
		{
			
			ele = ele.lastChild;
			if(ele == null){
				break;
			}
			els.push(ele);
			count ++;
		}
		var bottomEle = els[els.length-1];
		var topEle = bottomEle.parentNode.parentNode.parentNode.firstChild;
		els = [];
		count = 0;
		while( count < 50 )
		{
			
			topEle = topEle.lastChild;
			if(topEle == null){
				break;
			}
			els.push(topEle);
			count ++
		}
		if(els[els.length-1].parentNode.innerHTML.indexOf('start="0"') != -1){
			return false;
		}return  true; 
	} else { return true; }
};

var isTabLoading = function () {
	var ele = document.getElementById('ext-gen146'); //contains all of the tabs
	var els = [];
	count = 0;
	while(count < 50)
	{
	//return els;
	if(els.length > 0 && els[els.length-1].src){
		return els[el
		
		ele = ele.lastChild;
		if(ele == null){
			break;
		}
		els.push(ele);
		count ++;
	}s.length-1].src.indexOf('mydom/images/loading.gif') != -1;
	}return false;
};

var getEmptyTitle = function () { //gets the title of an empty tab panel (NOT tested for content filled, but should work)

	var root = document.getElementById('ext-gen146').lastChild; //open tab
	var count = 0;
	var els = [];
	while ( count < 50 ) {
		root = root.firstChild;
		if(root == null) {
			break;
		}
		els.push(root);
		count ++;
	}
	return els[els.length-1].parentNode.innerHTML;
	

};

var closeModalWindow = function () {
	 //This is ftl :/
	 var ele = document.body.lastChild.children[1].lastChild.lastChild.lastChild.lastChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild.firstChild;
	 var clickEv = document.createEvent('MouseEvent');
	 clickEv.initEvent('click', true, true);
	 ele.dispatchEvent(clickEv);
};

var evalDOM = function() {
	try {

		mydom.dbg('DOM LOOKUP');
		var testStartTime = new Date().getTime();
		
		loop = function(par, iter) {
			if(iter < 25){
				mydom.dbg(iter + ': ' + par.id);
				if((par.style && par.style.cursor && par.style.cursor == 'pointer') || par.href || par.onClick) {
					mydom.dbg("CAN CLICK:" + par.id);
					var clickEv = document.createEvent('MouseEvent');
					clickEv.initEvent('click', true, true);
					//par.children[o].dispatchEvent(clickEv);
					par.dispatchEvent(clickEv);
					//window.showModalDialog('wait.html',500);
					var timeOutStart = new Date().getTime();
					
					while(isTabLoading()){
						//window.showModalDialog('wait.html',500);
						if((new Date().getTime() - timeOutStart) > 10000) {
							errors.push('Tab has timed out: ' + getEmptyTitle() );
							break;
						}
					}
					
					timings.append(getEmptyTitle() + ": " + (new Date().getTime() - timeOutStart)/1000);
					
					if(!isTabHaveContent()){
						errors.push("No content: " + getEmptyTitle());
						//alert("No Content: " + getEmptyTitle());
					}
					closeOpenTabs();
				}
				if(par.children){
					mydom.dbg('has ' + par.children.length + ' children! :D');
					for(var o = 0; o < par.children.length; o++){
						
						//window.showModalDialog('wait.html',200);
						//alert('asdf');
						loop( par.children[o], iter++ );
					}
			
				}
			}
		};
		
		//Change this value to change what to test...
		//Assets Tab: 'ext-comp-1022'
		//
		loop(document.getElementById('ext-comp-1022'), 0);
		
		alert('Done! Total time: ' + (new Date().getTime() - testStartTime));
		alert('Errors: ' + JSON.stringify(errors));
		alert('Timings: ' + JSON.stringify(timings));
		//loop(document.body.children[0], 0);
		
		mydom.dbg('/DOM LOOKUP');
		testFinished = true;
	} catch ( e ) {
		return "error" + e;
	}
};

var ajaxHack = function (cfg, callback) {
	var callbackHack = function(data) {
		alert(data);
		callback(data);
	};
	//alert(cfg.url); 
	if(cfg.url.indexOf('logout') == -1 ) {
		if (cfg.url.indexOf('Dashboard') == -1 ) { 
			mydom._ajaxJAPP(cfg, callbackHack); 
		}
	}
};

var initReqHack =  function (reqType,url,isAsynch,respHandle,queryString,request,onTimeout) {
	var respHandleHack = function (data) {
		if(! data.responseText.length > 16 ) {
			errors.push('bad db response');
			alert('Bad!\n' + data.responseText);
		} if( data.responseText.indexOf("error:'DatabaseError'") != -1 ) {
			errors.push('Database Error occured: ' + getEmptyTitle());
			closeModalWindow();
		}
		//else { alert(data.responseText); }
		respHandle(data);
	};
	allQS.push(queryString);
	//alert(request)
	mydom.ajax._initReq(reqType,url,isAsynch,respHandleHack,queryString,request,onTimeout);

};

//gets all querystrings
allQS = [];
errors = [];
timings = [];
mydom.ajax.AJAX_TIMEOUT = 100 * 1000;
waitUp = 0;
testFinished = false;

mydom.ajax._initReq = mydom.ajax.initReq;
mydom.ajax.initReq = initReqHack;
mydom._ajaxJAPP = mydom.ajaxJAPP;
mydom.ajaxJAPP = ajaxHack;

