// MAIN

zwindows=10;
msg_show=null;
var curMenu = '';

curSlot = -1;
activeWin = null;
windowOrder = new Array();

function frontMe(id) {
	deactivate(activeWin);
	activeWin=id;
	activate(id);
	if(!msg_show) {
		xZIndex(ge(id+"_win"),zwindows);
		zwindows++;
	}
}

function shortenWindowOrder(id) {
	var newarr = new Array();
	var a = 0;
	for(i=0;i<windowOrder.length;i++) {
		if(windowOrder[i]!=id) {
			newarr[a]=windowOrder[i];
			a++;
		}
	}
	windowOrder=newarr;
	curSlot--;
}

function shiftWindows() {
	var found=false;
	for(i=0;i<windowOrder.length;i++) {
		if(windowOrder[i]==activeWin) found=true;
		if(found && i<windowOrder.length-1) {
			windowOrder[i]=windowOrder[i+1];
		}
	}
	windowOrder[windowOrder.length-1]=activeWin;
}

function deactivateAll() {
	for(i=0;i<activeWindows.length;i++) {
		deactivate(activeWindows[i]);
	}
}

function deactivate(w) {
	ge(w+"_win").className="window_inactive";
	ge(w+"_header").className="window_header_inactive";
	ge(w+"_win_main").className="window_main_inactive";
	//if(w!=msg_show) setCSS(ge(w+"_content"),"borderTop","1px solid #999");
	divs = ge(w+"_content").getElementsByTagName('div');
	for(i=0;i<divs.length;i++) {
		setCSS(divs[i],"overflow","hidden");
	}
	if(ge(w+"_footer")) {
		setCSS(ge(w+"_footer"),"borderTop","1px solid #999");
	}
}

function activateNextWin(base) {
	for(i=windowOrder.length-1;i>=0;i--) {
		if(windowOrder[i].indexOf(base)>=0) {
			frontMe(windowOrder[i]);
			activate(windowOrder[i]);
			break;
		}
	}
}

function activate(w) {
	if(!w) return;
	ge(w+"_win").className="window";
	ge(w+"_header").className="window_header";
	ge(w+"_win_main").className="window_main";
	//if(w!=msg_show) setCSS(ge(w+"_content"),"borderTop","1px solid black");
	divs = ge(w+"_content").getElementsByTagName('div');
	for(i=0;i<divs.length;i++) {
		setCSS(divs[i],"overflow","");
	}
	if(ge(w+"_footer")) {
		setCSS(ge(w+"_footer"),"borderTop","1px solid black");
	}
	activeWin=w;
	var base = w.split("_");
	if(ge(base[0]+"_menubar")) {
		ge(curMenu+"_menubar").style.display="none";
		ge(base[0]+"_menubar").style.display="";
		curMenu=base[0];
	}
	shiftWindows();
}

var menu = null;

function getContent(mod) {
	if(ge(mod+"_win")) {
		if(ge(mod+"_win").style.display=="none") ge(mod+"_win").style.display="";
		frontMe(mod);
		return;
	}
	menuli=null;
	hidemenus();
	AjaxIt("services.php?mod="+mod);
}

function init() {
	//AjaxIt("services.php?mod=base");
	loadDock();
	loadMenuBar('default');
	setTimeout('showMenuBar()',1);
	AjaxIt('services.php?mod=base&ajax=about');
	//displayLogin();
	//startTime();
	//setTimeout('welcome()',1000);
}

function loadMenuBar() {
	init=false;
	if(!ge('menubar')) {
		init=true;
		createMenuBar('base');
		addToMenuBar('base','MacWeb TK',{'About MacWeb':'about','Preferences':'preferences'});
		//addToMenuBar('base','User',{'Dev Blog':'blog'});
	}
}

function loadDock() {
	var dock_icons = [
		{
		  name:		'http://www.macwebos.com/img/dock_home',
		  caption:	'Home',
		  id:		'blog',
		  onclick:	function() { getContent('home'); }
		},
        {
          name:      'http://www.macwebos.com/img/dock_blog',
          caption:	'Development',
       	  id:		'blog',
          onclick:   function() { getContent('development'); }
        },
        {
          name:      'http://www.macwebos.com/img/dock_sites',
          caption:	'Projects',
       	  id:		'projects',
          onclick:   function() { getContent('projects'); }
        },
        {
          name:      'http://www.macwebos.com/img/dock_studies',
          caption:	'UXD Blog',
          id:		'studies',
          onclick:   function() { getContent('blog'); }
        },
        {
          name:		'http://www.macwebos.com/img/dock_browser',
          caption:	'Browser',
          id:		'about',
          onclick:	function() { getContent('browser'); }
        },
        {
          name:      'http://www.macwebos.com/img/dock_about',
          caption:	'About',
          id:		'about',
          onclick:   function() { getContent('about'); }
        }
      ];
      
      new DockMe(dock_icons, 50, 100);
      setTimeout('showDock()',100);
}

function showDock() { $('#dock').DropInDown(500); }
function showMenuBar() { $('#topbar').DropInUp(500); }
function hideDock() { $('#dock').DropOutDown(500); }
function hideMenuBar() { $('#topbar').DropOutUp(500); }


// MENU BAR

function createMenuBar(id) {
	var d = document.createElement('span');
	d.id=id+"_menubar";
	ge('topbar').appendChild(d);
	var ul = document.createElement('ul');
	ul.className="leftside";
	d.appendChild(ul);
	if(ge(curMenu+'_menubar')) ge(curMenu+'_menubar').style.display="none";
	curMenu=id;
}

function addToMenuBar(id,title,params) {
	var menu = ge(id+'_menubar');
	var ul = menu.getElementsByTagName('ul')[0];
	var items = ul.getElementsByTagName('li');
	var point = items.length+1;
	var li = document.createElement('li');
	li.className="first";
	var a = document.createElement('a');
	a.style.cursor="pointer";
	a.setAttribute("onclick","showmenu(this,'"+id+"',"+point+")");
	a.style.cursor="pointer";
	if(point==1) a.innerHTML='<b>'+title+'</b>';
	else a.innerHTML=title;
	li.appendChild(a);
	ul.appendChild(li);
	var div = document.createElement('div');
	menu.appendChild(div);
	div.id=id+"_menu_"+point;
	div.className="submenu";
	div.style.display="none";
	var ul2 = document.createElement('ul');
	div.appendChild(ul2);
	for(var i in params) {
		var li2 = document.createElement('li');
		var a2 = document.createElement('a');
		a2.style.cursor="pointer";
		a2.setAttribute("onclick","sendMsg('"+id+"','"+params[i]+"')");
		a2.innerHTML=i;
		li2.appendChild(a2);
		ul2.appendChild(li2);
	}
}


// WINDOW

function createWindow(id,params) {
	if(ge(id+"_win")) {
		frontMe(id);
		return;
	}
	var close = params['close'];
	var maxmin = params['maxmin'];
	var type = params['type'];
	var width = params['width'];
	var height = params['height'];
	var title = params['title'];
	var cent = params['center'];
	var resize = params['resize'];
	var x = params['x'];
	var y = params['y'];
	var parent = params['parent'];
	
	if(!cent) cent='';
	
	if(type=='info' || type=='msg') {
		maxmin=0;
		close=1;
	}
	
	var maxed = false;
	var mined = false;
	if(width=='' || width==0) basewidth = 640;
	else basewidth = width;
	if(height=='' || height==0) baseheight = 480;
	else baseheight = height;

	var win = createElm('div',id+"_win",'window',ge('main'));
	win.onmousedown=goToFront;
		setCSS(win,'display','none');
		setCSS(win,'width',basewidth+'px');
		setCSS(win,'height',baseheight+'px');
	var win_main = createElm('div',id+"_win_main",'window_main',win);
		setCSS(win_main,'width',basewidth+'px');
		setCSS(win_main,'height',baseheight+'px');
	var header = createElm('div',id+"_header",'window_header',win_main);
		setCSS(header,'width',basewidth+'px');
		setCSS(header,'height','25px');
	var header_content = createElm('div','','window_header_content',header);
	var header_left = createElm('div','','window_header_left',header_content);
	
	if(type!='panel') {
		header_left.onmouseover = mouseover_icons;
		header_left.onmouseout = mouseout_icons;
	}
	
	//window buttons
	
	var close_div = createElm('div','','window_header_button',header_left);
		var closeBtn = createElm('img',id+'_win_close','',close_div);
		if(close==1) {
			if(type!='panel') closeBtn.setAttribute("src","http://www.macwebos.com/img/close.png");
			else closeBtn.setAttribute("src","http://www.macwebos.com/img/panel_close.png");
			closeBtn.onclick=closeWin;
		}
		else closeBtn.setAttribute("src","http://www.macwebos.com/img/icon_fade.png");
		
	if(type!='panel') {
		var min_div = createElm('div','','window_header_button',header_left);
			var minBtn = createElm('img',id+'_win_min','',min_div);
			if(maxmin==1) {
				minBtn.setAttribute("src","http://www.macwebos.com/img/min.png");
				minBtn.onclick=minWin;
			}
			else minBtn.setAttribute("src","http://www.macwebos.com/img/icon_fade.png");
		var max_div = createElm('div','','window_header_button',header_left);
			var maxBtn = createElm('img',id+'_win_max','',max_div);
			if(maxmin==1) {
				maxBtn.setAttribute("src","http://www.macwebos.com/img/max.png");
				maxBtn.onclick=maxWin;
			}
			else maxBtn.setAttribute("src","http://www.macwebos.com/img/icon_fade.png");
	}
			
	var win_title = createElm('div',id+'_win_title','window_header_title',header_content);
		setCSS(win_title,'width',(basewidth-140)+'px');
		if(title) win_title.innerHTML = title;
		else win_title.innerHTML="&nbsp;&nbsp;&nbsp;&nbsp;";
	
	var header_right = createElm('div',id+'_header_right','window_header_right',header_content);
	
	var content = createElm('div',id+'_content','window_content',win_main);
		setCSS(content,'width',basewidth+'px');
	
	if(!params['footer'] && type==1) {
		var footer = createElm('div',id+'_footer','window_footer',win_main);
			setCSS(footer,'width',basewidth+'px');
			setCSS(content,'bottom','10px');
	}
	
	if(type=='msg') {
		setCSS(content,'background','url(http://www.macwebos.com/img/msg_win.png)');
		setCSS(content,'border','0px');
		setCSS(content,'padding','10px');
		setCSS(content,'width',(basewidth-20)+'px');
	}
	else if(type=='panel') {
		setCSS(header,'background','url(http://www.macwebos.com/img/panel_header.png)');
		setCSS(content,'background','url(http://www.macwebos.com/img/panel_bg.png)');
	}
	
	if(type=='info') {
		closeBtn.setAttribute("width","16");
		maxBtn.setAttribute("width","16");
		minBtn.setAttribute("width","16");
		setCSS(content,'top','15px');
		setCSS(header,"height","15px");
		setCSS(header,"fontSize","11px");
		setCSS(header_left,"padding","0 0 0 2px");
		setCSS(win_title,"fontWeight","normal");
		setCSS(win_title,"padding","1px 0");
	}
	if(type!='msg') xEnableDrag(id+'_win_title',begindrag,barOnDrag,callafter);
	
	center();
	setCSS(win,'display','block');

	function begindrag() {}
	function callafter() {}

	function barOnDrag(e, mdx, mdy) {
		var leftBorder=0;
		var rightBorder=0;
		var parent = document.getElementById('main');
		var widget = document.getElementById(id+'_win');
		var x = xLeft(widget) + mdx;
		var y = xTop(widget) + mdy;
		var xright = xWidth(parent) - xWidth(widget) - rightBorder;
		var ybottom = xHeight(parent) - xHeight(widget);
		
		if (x < leftBorder - xWidth(widget) + 75) x = leftBorder - xWidth(widget) + 75;
		if (x > xright + xWidth(widget) - 75) x = xright + xWidth(widget) - 75;
		if (y > ybottom + xHeight(widget) - 50) y = ybottom + xHeight(widget) - 50;
		
		if (y < 30) y = 30;
		xMoveTo(widget, x, y);
	}
	
	/*
		center()
		+ which=='' ? center on browser
		+ which=='x' ? center x
		+ which=='y' ? center y
		+ which=='parent' ? center in parent
	*/
	
	function center(which) {
		if(x) win.style.left=(x+20)+"px";
		if(y) win.style.top=(y+40)+"px";
		else {
			var bwidth = xWidth(xGetElementById("main"));
			var bheight = xHeight(xGetElementById("main"));
			var xcent = (bwidth - width)/2;
			var ycent = (bheight - height)/2;
			if(which=='x' || !which) win.style.left=xcent+"px";
			if(which=='y' || !which) {
				if(ycent<30) ycent=30;
				win.style.top=ycent+"px";
			}
		}
	}
	
	function goToFront() {
		if(activeWin) deactivate(activeWin);
		activeWin=id;
		activate(id);
		xZIndex(win,zwindows);
		zwindows++;
		if(msg_show) {
			xZIndex(msg_show,zwindows);
			zwindows++;
		}
	}
	
	function mouseover_icons() {
		if(close==1) closeBtn.src="http://www.macwebos.com/img/close_hover.png";
		if(maxmin==1) {
			maxBtn.src="http://www.macwebos.com/img/max_hover.png";
			minBtn.src="http://www.macwebos.com/img/min_hover.png";
		}
	}
	
	function mouseout_icons() {
		if(close==1) closeBtn.src="http://www.macwebos.com/img/close.png";
		if(maxmin==1) {
			maxBtn.src="http://www.macwebos.com/img/max.png";
			minBtn.src="http://www.macwebos.com/img/min.png";
		}
	}
	
	function closeWin() {
		if(params['warnbeforeclose']) {
			if(!confirm("Are you sure you want to close?")) return;
		}
		if(params["ontop"]==1 || type=='msg') msg_show=null;
		shortenWindowOrder(id);
		var test = id.split("_");
		if(test.length>1) {
			activateNextWin(test[0]);
		}
		else if(curSlot>=0) activate(windowOrder[curSlot]);
		ge('main').removeChild(win);
		removeCSS(id+"_css");
		if(id=='base') return;
		if(ge(id+"_menubar")) ge('topbar').removeChild(ge(id+"_menubar"));
		if(windowOrder.length==0) {
			ge('base_menubar').style.display="";
			curMenu = 'base';
		}
		AjaxIt('services.php?mod='+id+"&end");
	}
	
	function minWin() {
		win.style.display="none";
		mined=true;
		//$('#'+win.id).Shrink(500);
	}
	
	function maxWin() {
		if(maxed) {
			resizeTo(basewidth,baseheight);
			resizeMain();
			win
			maxed=false;
		}
		else {
			resizeTo(xWidth(xGetElementById('main'))-20,xHeight(xGetElementById('main'))-150);
			resizeMain();
			win.style.left="15px";
			win.style.top="45px";
			maxed=true;
		}
	}
	
	function resizeMain() {
		if(ge(id+'_content_main')) {
			main = ge(id+'_content_main');
			main.style.left = xWidth(id+"_sidebar")+"px";
			main.style.width = (xWidth(content) - xWidth(id+"_sidebar"))+"px";	
		}
	}
	
	function resizeTo(w,h) {
		setCSS(win,"width",w+"px");
		if(h) setCSS(win,"height",h+"px");
		setCSS(win_main,"width",w+"px");
		if(h) setCSS(win_main,"height",h+"px");
		setCSS(win_title,"width",(w-140)+"px");
		setCSS(header,"width",w+"px");
		setCSS(content,"width",w+"px");
		setCSS(footer,"width",w+"px");
		center();
	}
	
	if(resize==1) {
		setCSS(footer,"height","20px");
		var rBtn = createElm('div','','',id+"_footer");
		setCSS(rBtn,"position","absolute");
		setCSS(rBtn,"background","url(http://www.macwebos.com/img/resize.png) no-repeat bottom right");
		setCSS(rBtn,"bottom","0px");
		setCSS(rBtn,"right","0px");
		setCSS(rBtn,"height","10px");
		setCSS(rBtn,"width","10px");
		setCSS(rBtn,"cursor","se-resize");
		xEnableDrag(rBtn, wndsresize, resOnDrag, wndresize);
	}
	
	function wndsresize() {}
	
	function wndresize() {}
	
	function resOnDrag(e, mdx, mdy) {
		var x = xWidth(win) + mdx;
		var y = xHeight(win) + mdy;
		if (x < 200) x = 200;
		if (y < 200) y = 200;
		xResizeTo(win, x, y);
		xResizeTo(win_main,x,y);
		xResizeTo(header,x);
		if(ge(id+"_toolbar")) {
			xResizeTo(ge(id+"_toolbar").parentNode,x);
		}
		xResizeTo(win_title,(x-140));
		xResizeTo(content,x);
		setCSS(content,"overflow","auto");
		if(ge(id+'_sidebar')) {
			ax = xWidth(ge(id+"_sidepanel")) - x;
			xResizeTo(ge(id+"_content_main"),ax);
			//xResizeTo(ge(id+"_content_main_inner"),ax);
		}
		else {
		}
		xResizeTo(footer,x);
	}
	
	curSlot++;
	if(curSlot>0) deactivate(windowOrder[curSlot-1]);
	activeWin = id;
	windowOrder[curSlot]=this.id;
	goToFront();
	if(params['ontop']==1 || type=='msg') msg_show=win;
	return win;
}

//Hide all submenus from menubar

function hidemenus(hide) {
	if(hide) {
		menuli=null;
		menu=null;
	}
	if(ge('topbar')) {
		var links = ge('topbar').getElementsByTagName('a');
		for(i=0;i<links.length;i++) {
			if(links[i]!=menuli) links[i].className="";
		}
		var divs = ge('topbar').getElementsByTagName('div');
		for(i=0;i<divs.length;i++) {
			if(divs[i].className=="submenu") divs[i].style.display="none";
		}
		menu=null;
		menuli=null;
	}
}

//Show a submenu from the menubar and highlight correct link

function showmenu(elm,id,num) {
	var temp = elm.className;
	elm.className="active";
	menuli=elm;
	setMenuHover(id,1);
	hidemenus();
	var submenu = ge(id+'_menu_'+num);
	submenu.style.left=elm.offsetLeft+"px";
	submenu.style.display="";
	var width = submenu.offsetWidth;
	var diff = window.innerWidth - elm.offsetLeft;
	if(diff<200) {
		var otherdiff = submenu.offsetWidth-elm.offsetWidth;
		submenu.style.left=elm.offsetLeft-otherdiff+"px";
	}
	menu=submenu;
	menuli=elm;
}

function setMenuHover(id,dir) {
	if(!ge(id+'_menubar')) return;
	var links = ge(id+'_menubar').getElementsByTagName('li');
	for(i=0;i<links.length;i++) {
		if(links[i].className=="first") {
			var a = links[i].childNodes[0];
			var onclick = a.getAttribute("onclick");
			if(dir==1) {
				a.setAttribute("onmouseover",onclick);
			}
			else {
				a.removeAttribute("onmouseover");
			}
		}
	}
}

function doc_click(e) {
	var x = e.clientX;
	var y = e.clientY;
	if(menu) {
		var left = parseFloat(menu.style.left.substring(0,menu.style.left.length-2));
		var top = 23;
		var right = eval(left+140);
		var height = menu.offsetHeight+top;
		if(x>=left && x<=right && y<=height) {}
		else {
			menuli=null;
			hidemenus();
			setMenuHover(curMenu,0);
		}
	}
}

function createElm(type,id,cla,parent,params) {
	var ret = document.createElement(type);
	if(cla!="\'\'") ret.setAttribute("class",cla);
	if(id!="\'\'") ret.setAttribute("id",id);
	var t = typeof(parent);
	if(t!='object') parent = ge(parent);
	if(params && params["center"]) {
		var cent = document.createElement('center');
		parent.appendChild(cent);
		cent.appendChild(ret);
	}
	else parent.appendChild(ret);
	if(params) {
		if(params["content"]) ret.innerHTML=params["content"];
		if(params["src"]) ret.src=params["src"];
		if(params["width"]) ret.width=params["width"];
		if(params["href"]) ret.href=params["href"];
	}
	//xZIndex(ret,zwindows);
	//zwindows++;
	return ret;
}

function setCSS(elm,prop,val) {
	eval('elm.style.'+prop+'=\''+val+'\'');
}

function setInnerHTML(elm,html) {
	ge(elm).innerHTML=html;
}

function AjaxIt(url,id,postfunc) {
	var myAjax = new AjaxMe();
	myAjax.open("GET",url,true);
	myAjax.onreadystatechange=function() {
		if(myAjax.readyState==4 || myAjax.readyState=="complete") {
			if(myAjax.responseXML && myAjax.responseXML!="") {
				xml_me(myAjax);
				if(postfunc) eval(postfunc+"(myAjax)");
			}
			else if(myAjax.responseText) {
				if(id) {
					ge(id).innerHTML=myAjax.responseText;
					evalScripts(id);
				}
			}
			if(postfunc) eval(postfunc+"(myAjax.responseText)");
			return;
		}
	}
	myAjax.send(null);
}


function AjaxMe() {
	var xmlHttp=null;
	try {
 		xmlHttp=new XMLHttpRequest();
 	}
	catch (e) {
	 try {
	 		xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e) {
			xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
 	}
	return xmlHttp;
}

function evalScripts(id) {
	var scripts = ge(id).getElementsByTagName('script');
	for(i=0;i<scripts.length;i++) eval(scripts[i].innerHTML);	
}

function xml_me(msg) {
	msg = msg.responseXML;
	if(msg) {
		if(msg.hasChildNodes()) {
			var actions = msg.getElementsByTagName("action");
			for(count=0;count<actions.length;count++) {
				task = actions[count].getElementsByTagName('task')[0].firstChild.nodeValue;
				if(actions[count].getElementsByTagName("id").length>0) {
					var id = actions[count].getElementsByTagName("id")[0].firstChild.nodeValue;
				}
				if(task=='createWindow') {
					var params = actions[count].getElementsByTagName('params')[0].firstChild.nodeValue;
					var string = "createWindow('"+id+"',"+params+");";
					eval(string);
				}
				else if(task == 'createDock') {
					var params = actions[count].getElementsByTagName('params')[0].firstChild.nodeValue;
					eval("new DockMe("+params+", 50, 100)");
					setTimeout('showDock()',100);
				}
				else if(task == 'createSearch') {
					var params = actions[count].getElementsByTagName('params')[0].firstChild.nodeValue;
					var parent = actions[count].getElementsByTagName('parent')[0].firstChild.nodeValue;
					eval("createSearch('"+id+"','"+parent+"',"+params+")");
				}
				else if(task == 'createToolbar') {
					eval("createToolbar('"+id+"')");
				}
				else if(task == 'createToolbarSpace') {
					var width = actions[count].getElementsByTagName('width')[0].firstChild.nodeValue;
					eval("createToolbarSpace('"+id+"',"+width+")");
				}
				else if(task == 'createToolbarLine') {
					createToolbarLine(id);
				}
				else if(task == 'createToolbarIcon') {
					var icon = actions[count].getElementsByTagName('icon')[0].firstChild.nodeValue;
					var text = actions[count].getElementsByTagName('text')[0].firstChild.nodeValue;
					var onclick = actions[count].getElementsByTagName('onclick')[0].firstChild.nodeValue;
					var params = actions[count].getElementsByTagName('params')[0].firstChild.nodeValue;
					var attr = actions[count].getElementsByTagName('attr');
					if(attr.length>0) {
						attr = actions[count].getElementsByTagName('attr')[0].firstChild.nodeValue;
					}
					else attr="\'\'";
					eval("createToolbarIcon('"+id+"','"+icon+"','"+text+"','"+onclick+"','"+params+"',"+attr+")");
				}
				else if(task == 'createTable') {
					var params = actions[count].getElementsByTagName('params')[0].firstChild.nodeValue;
					eval("createTable('"+id+"',"+params+")");
				}
				else if(task == 'addTableHeaders' || task == 'addTableData') {
					var params = actions[count].getElementsByTagName('params')[0].firstChild.nodeValue;
					if(task == 'addTableHeaders') eval(task+"('"+id+"',"+params+")");
					else {
						var callback = actions[count].getElementsByTagName('callback')[0].firstChild.nodeValue;
						var pass = actions[count].getElementsByTagName('pass')[0].firstChild.nodeValue;
						eval(task+"('"+id+"',"+params+",'"+callback+"',"+pass+")");
					}
				}
				else if(task == 'createSidePanel') {
					createSidePanel(id);
				}
				else if(task == 'createSideList') {
					createSideList(id);
				}
				else if(task == 'createSideListTree') {
					var title = actions[count].getElementsByTagName('title')[0].firstChild.nodeValue;
					createSideListTree(id,title);
				}
				else if(task == 'createSideListItem') {
					var parent = actions[count].getElementsByTagName('parent')[0].firstChild.nodeValue;
					var icon = actions[count].getElementsByTagName('icon')[0].firstChild.nodeValue;
					var text = actions[count].getElementsByTagName('text')[0].firstChild.nodeValue;
					var onclick = actions[count].getElementsByTagName('onclick')[0].firstChild.nodeValue;
					var params = actions[count].getElementsByTagName('params')[0].firstChild.nodeValue;
					var s = params.toString();
					eval("createSideListItem('"+id+"','"+parent+"','"+icon+"','"+text+"','"+onclick+"',"+s+")");
				}
				else if(task == 'createDetailList') {
					var params = actions[count].getElementsByTagName('params')[0].firstChild.nodeValue;
					var parent = actions[count].getElementsByTagName('parent')[0].firstChild.nodeValue;
					eval("createDetailList('"+id+"','"+parent+"',"+params+")");
				}
				else if(task == 'setDetailList') {
					var params = actions[count].getElementsByTagName('params')[0].firstChild.nodeValue;
					eval("setDetailList('"+id+"',"+params+")");
				}
				else if(task == 'createMenuBar') {
					createMenuBar(id);
				}
				else if(task == 'addToMenuBar') {
					var title = actions[count].getElementsByTagName('title')[0].firstChild.nodeValue;
					var params = actions[count].getElementsByTagName('params')[0].firstChild.nodeValue;
					eval("addToMenuBar('"+id+"','"+title+"',"+params+")");
				}
				else if(task == 'runJS') {
					var js = actions[count].getElementsByTagName('js')[0].firstChild.nodeValue;
					eval(js);
				}
				else if(task == 'runAjax') {
					var func = actions[count].getElementsByTagName('func')[0].firstChild.nodeValue;
					var output = actions[count].getElementsByTagName('output')[0].firstChild.nodeValue;
					var params = actions[count].getElementsByTagName('params');
					eval("AjaxIt('services.php?mod="+id+"&ajax="+func+"&params="+params+"','"+output+"')");
				}
				else if(task == 'setCSS') {
					var elm = actions[count].getElementsByTagName('elm')[0].firstChild.nodeValue;
					var prop = actions[count].getElementsByTagName('prop')[0].firstChild.nodeValue;
					var val = actions[count].getElementsByTagName('val')[0].firstChild.nodeValue;
					eval("setCSS(ge(\'"+elm+"\'),'"+prop+"','"+val+"')");
				}
				else if(task == 'loadCSS') {
					var url = actions[count].getElementsByTagName('url')[0].firstChild.nodeValue;
					eval("loadCSS('"+url+"','"+id+"')");
				}
				else if(task == 'clear') {
					clear(id);
				}
				else if(task == 'createElm') {
					var type = actions[count].getElementsByTagName('type')[0].firstChild.nodeValue;
					var elid = actions[count].getElementsByTagName('elid')[0].firstChild.nodeValue;
					var cla = actions[count].getElementsByTagName('class')[0].firstChild.nodeValue;
					var params = actions[count].getElementsByTagName('params');
					if(params.length>0) {
						params = actions[count].getElementsByTagName('params')[0].firstChild.nodeValue;
						eval("createElm('"+type+"','"+elid+"','"+cla+"','"+id+"',"+params+")");
						
					}
					else eval("createElm('"+type+"','"+elid+"','"+cla+"','"+id+"')");
				}
			}
		}
	}
}

function sendMsg(id,func,params) {
	if(!params) params="";
	if(func=='end') {
		var t = id.split("_");
		if(t.length==1) closeAll(id);
	}
	menuli=null;
	hidemenus();
	setMenuHover(curMenu,0);
	myAjax = new AjaxMe();
	myAjax.onreadystatechange = function() {
        if (myAjax.readyState == 4) {
            xml_me(myAjax);
        }
    }
  	myAjax.open('POST', "services.php?mod="+id+"&ajax="+func, true);
  	myAjax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;');
  	var s = "";
  	for(var i in params) {
  		s+=i+"='"+params[i]+"',";
  	}
  	s = s.substring(0,s.length-1);
  	myAjax.send('params=' + encodeURIComponent(s));
}

function clear(id) {
	ge(id).innerHTML="";
}

function center(id) {
	var cent = document.createElement('center');
	var elm = ge(id);
	var parent = elm.parentNode;
	parentNode.removeChild(elm);
	parentNode.appendChild(cent);
	cent.appendChild(elm);
}

//////////////////
// HEADER STUFF //
//////////////////

function tags(name) { return document.getElementsByTagName(name); }

//Load script dynamically
function loadScript(url,id) {
   var e = document.createElement("script");
   e.src = url;
   e.type="text/javascript";
   e.setAttribute("id","script_"+id);
   tags("head")[0].appendChild(e);
}

function removeScript(id) {
	var elm = ge("script_"+id);
	if(elm) tags("head")[0].removeChild(elm);
}

//Load css dynamically into header with the specified url and id

function loadCSS(url,id) {
	if(ge(id)) return;
	var elm = document.createElement("link")
	elm.setAttribute("href",url);
	elm.setAttribute("rel","stylesheet");
	elm.setAttribute("type","text/css"); 
	elm.setAttribute("id",id);
	tags("head")[0].appendChild(elm);
}

//Remove css dynamically from header, using its id

function removeCSS(id) {
	var elm = ge(id);
	if(elm) tags("head")[0].removeChild(elm);
}

//table rollover


// TABLE ROLLOVERS //

var arrayOfRolloverClasses = new Array();
var arrayOfClickClasses = new Array();
var activeRow = false;
var activeRowClickArray = new Array();

function clickOnTableRow(elm) {
	var tableObj = elm.parentNode;
	if(tableObj.tagName!='TABLE') tableObj = tableObj.parentNode;		
	
	if(activeRowClickArray[tableObj.id] && elm!=activeRowClickArray[tableObj.id]){
		activeRowClickArray[tableObj.id].className='reg';
	}
	elm.className = arrayOfClickClasses[tableObj.id];
	activeRowClickArray[tableObj.id] = elm;	
}

function resetRowStyle() {
	var tableObj = this.parentNode;
	if(tableObj.tagName!='TABLE')tableObj = tableObj.parentNode;

	if(activeRowClickArray[tableObj.id] && this==activeRowClickArray[tableObj.id]){
		this.className = arrayOfClickClasses[tableObj.id];
		return;	
	}
	
	var origCl = this.getAttribute('origCl');
	if(!origCl)origCl = this.origCl;
	this.className=origCl;
}
	
function addTableRolloverEffect(tableId,whichClass,whichClassOnClick)
{
	arrayOfRolloverClasses[tableId] = whichClass;
	arrayOfClickClasses[tableId] = whichClassOnClick;
	
	var tableObj = document.getElementById(tableId);
	var rows = tableObj.getElementsByTagName('TR');
	for(var no=0;no<rows.length;no++){
		if(whichClassOnClick){
			rows[no].onclick = clickOnTableRow;	
		}
	}
}

function highlight(elm) {
	var els = elm.parentNode.parentNode.getElementsByTagName('li');
	for(i=0;i<els.length;i++) {
		if(els[i].className!="list_title") els[i].className="";	
	}
	elm.className="active";
}

function toggleList(elm,id) {
	ge(id).style.display = (ge(id).style.display=="none")?"":"none";	
	elm.src = (elm.src.indexOf("d_")>0)?"http://www.macwebos.com/img/r_arrow.gif":"http://www.macwebos.com/img/d_arrow.gif";
}

// TOOL BAR

// TOOLBAR

function createToolbar(parentid) {
	var div = createElm('div',parentid+'_toolbar_outer',"window_toolbar",ge(parentid+"_header"));
	createElm('div',parentid+'_toolbar','window_toolbar_content',div);
	setCSS(ge(parentid+'_header'),'height','75px');
	setCSS(ge(parentid+'_content'),'top','75px');
	setCSS(div,"width",xWidth(ge(parentid+"_header"))+"px");
	var img = createElm('img',parentid+'_min_toolbar','',ge(parentid+'_header_right'));
	img.setAttribute("src","http://www.macwebos.com/img/toolbar_min.png");
	img.setAttribute("onclick","toggleToolbar(\'"+parentid+"')");
}

function createToolbarIcon(parentid,image,text,callback,params,attr) {
	var items = ge(parentid+"_toolbar").childNodes.length;
	var div = createElm('div',parentid+'_toolbar_item_'+items,'window_toolbar_item',ge(parentid+"_toolbar"));
	var imgDiv = createElm('div','','window_toolbar_img',div);
	var textDiv = createElm('div','','window_toolbar_text',div);
	if(callback == 'js') {
		imgDiv.innerHTML='<a onclick="'+params+'"><img src="'+image+'"></a>';
		textDiv.innerHTML='<a onclick="'+params+'">'+text+'</a>';
	}
	else if(callback == 'ajax') {
		var a = document.createElement('a');
		a.onclick = function() { AjaxIt('services.php?mod='+parentid+'&ajax='+params); }
		var img = document.createElement('img');
		img.src=image;
		a.appendChild(img);
		imgDiv.appendChild(a);
		var a2 = document.createElement('a');
		a2.onclick = function() { AjaxIt('services.php?mod='+parentid+'&ajax='+params); }
		a2.innerHTML=text;
		textDiv.appendChild(a2);
	}
	else if(callback == 'href') {
		imgDiv.innerHTML='<a href="'+params+'"><img src="'+image+'"></a>';
		textDiv.innerHTML='<a href="'+params+'">'+text+'</a>';
	}
	var right = attr['right'];
	if(right) div.className="window_toolbar_item_floatRight";
	var width = attr['width'];
	if(width) setCSS(div,"width",width+"px");
}

function createToolbarLine(parentid) {
	var div = createElm('div','','window_toolbar_separator',ge(parentid+"_toolbar"));
}

function createToolbarSpace(parentid,width) {
	var div = createElm('div','','window_toolbar_space',ge(parentid+"_toolbar"));
	setCSS(div,"width",width+"px");
}

// SIDE PANEL

function createSidePanel(parentid) {
	var div = createElm('div',parentid+"_sidebar","window_sidepanel",ge(parentid+"_content"));
	var div2 = createElm('div',parentid+"_content_main","window_content_main",ge(parentid+"_content"));
	var div3 = createElm('div',parentid+"_content_main_inner","window_content_main_inner",div2);
	var width = xWidth(ge(parentid+"_win")) - xWidth(div);
	setCSS(div2,"width",width+"px");
	setCSS(div2,"left",xWidth(div)+"px");
	setCSS(div,"bottom",(xHeight(ge(parentid+"_footer"))-10)+"px");
}

function createSideList(id) {
	var ul = createElm('ul',id+"_sidetree",'',ge(id+"_sidebar"));
}

function createSideListTree(id,title) {
	var items = ge(id+"_sidetree").childNodes.length/2;
	var li = createElm('li',id+"_sidetree_list_"+items,'list_title',ge(id+"_sidetree"));
	var arr = new Image();
	arr.src="http://www.macwebos.com/img/d_arrow.gif";
	arr.style.cursor="pointer";
	arr.setAttribute("onclick","toggleList(this,'"+id+"_sidetree_list_"+items+"_sublist')");
	li.appendChild(arr);
	li.innerHTML+=title;
	var ret = createElm('ul',id+"_sidetree_list_"+items+"_sublist",'',ge(id+"_sidetree"));
	return ret;
}

function createSideListItem(id,parent,icon,title,onclick,params) {
	if(ge(parent)) parent = ge(parent);
	var items = parent.childNodes.length/2;
	var el = createElm('li',id+"_sidetree_listitem_"+items,'',parent);
	el.onclick=function() { highlight(this); sendMsg(id,onclick,params) };
	var t = createElm('table','','',el);
	var tr = createElm('tr','','',t);
	var td1 = createElm('td','','',tr);
	td1.setAttribute("width","20");
	var img = createElm('img','','',td1);
	img.setAttribute("src","http://www.macwebos.com/"+icon);
	var td2 = createElm('td','','',tr);
	td2.setAttribute("align","left");
	td2.innerHTML=title;
}

function addAction(id,mod,onclick,params) {
	ge(id).onclick = function() { sendMsg(mod,onclick,params); }
}

function toggleToolbar(id) {
	var toolbar = ge(id+"_toolbar").parentNode;
	if(toolbar.style.display!="none") {
		setCSS(toolbar,"display","none");
		setCSS(ge(id+"_header"),"height","25px");
		setCSS(ge(id+"_content"),"top","25px");
	}
	else {
		setCSS(toolbar,"display","");
		setCSS(ge(id+"_header"),"height","85px");
		setCSS(ge(id+"_content"),"top","85px");
	}
}

function createSearch(id,parent,params) {
	var div = createElm('div',id,'search',ge(parent));
	var input = document.createElement('input');
	input.setAttribute("type","text");
	input.setAttribute("name","search");
	var span = document.createElement('span');
	span.setAttribute("class","sbox_l");
	var span2 = document.createElement('span');
	span2.setAttribute("class","sbox");
	span2.appendChild(input);
	span3 = document.createElement('span');
	span3.setAttribute("class","sbox_r");
	div.appendChild(span);
	div.appendChild(span2);
	div.appendChild(span3);
	var width = params["width"];
	var base = id.split("_");
	var callback = params["callback"];
	var live = params["live"];
	var text = createElm('div','','',div);
	text.innerHTML='Search';
	var send = function() { sendMsg(base[0],callback,this.value); }
	input.setAttribute("onblur",send);
}

// DETAIL LIST

function createDetailList(id,parent,params) {
	var elm = createElm('div',id,'detail_list',ge(parent));
	var t = createElm('table','','',elm);
	for(var i in params) {
		var tr = createElm('tr','','',t);
		var td1 = createElm('td','','',tr);
		var td2 = createElm('td','','',tr);
		td1.setAttribute("class","detail_left");
		td2.setAttribute("class","detail_right");
		td1.innerHTML=i+":";
		td2.innerHTML=params[i];
	}
	elm.style.padding="10px";
	elm.style.borderBottom="1px solid #ccc";
	elm.style.margin="0 10px 5px 10px";
}

function setDetailList(id,params) {
	ge(id).removeChild(ge(id).childNodes[0]);
	var t = createElm('table','','',ge(id));
	for(var i in params) {
		var tr = createElm('tr','','',t);
		var td1 = createElm('td','','',tr);
		var td2 = createElm('td','','',tr);
		td1.setAttribute("class","detail_left");
		td2.setAttribute("class","detail_right");
		td1.innerHTML=i+":";
		td2.innerHTML=params[i];
	}
}

// TABLE

function createTable(id,params) {
	var parent = params["parent"];
	var height = params["height"];
	var div = document.createElement('div');
	div.setAttribute("class","data");
	div.setAttribute("id",id+"_datatable_div");
	div.style.height=height+"px";
	ge(parent).appendChild(div);
	var table = createElm('table',id+"_datatable",'datatable',div);
	if(height) table.style.height=height+"px";
	table.setAttribute("width",xWidth(ge(parent))+"px");
	table.setAttribute("cellspacing","0");
	var div2 = document.createElement('div');
	ge(parent).appendChild(div2);
	div2.setAttribute("class","datatable_bar");
	addTableRolloverEffect(id+"_datatable",'reg','reg_click');
}

function addTableHeaders(id,params) {
	var table = ge(id+"_datatable");
	var tr = document.createElement('tr');
	table.appendChild(tr);
	for(var i in params) {
		var th = document.createElement('th');
		th.innerHTML=params[i];
		if(params[i]=="") th.innerHTML="&nbsp;";
		tr.appendChild(th);
	}
}

function addTableData(id,params,callback,pass) {
	var table = ge(id+"_datatable");
	var tr = document.createElement('tr');
	table.appendChild(tr);
	for(var i in params) {
		var td = document.createElement('td');
		td.innerHTML=params[i];
		if(params[i]=="") td.innerHTML="&nbsp;";
		tr.appendChild(td);
		tr.style.cursor="pointer";
		tr.onclick = function() { clickOnTableRow(this); sendMsg(id,callback,pass); }
	}
}