		var myConn = new XHConn();
		var myObj;
		var mySwapObj;
		var pid;
		var cid;
		var myCID;
		var skinpath;
		
		function toggleElement(obj){
/*			if (obj.style.visibility == 'hidden'){
				obj.style.visibility = 'visible';
				obj.style.display = 'block';
			} else {
				obj.style.visibility = 'hidden';
				obj.style.display = 'none';
			}*/
			obj.style.display = (obj.style.display == 'none' ? '' : 'none');
			obj.style.visibility = 'visible';
		}
		
		function changeArrow(obj){
			newobj = obj.previousSibling.firstChild;
			pos = newobj.getAttribute("pos");
			if(pos=='down'){
				newobj.src = '/admin/skins/wscms/images/popup_arrow_right.gif';
				newobj.setAttribute("pos","up");
				hideSelects();
			} else {
				newobj.src = '/admin/skins/wscms/images/popup_arrow_down.gif';
				newobj.setAttribute("pos","down");
				showSelects();
			}
		}	
		
		function showSelects(){
			 var elements = document.getElementsByTagName("select");
			 for (i=0;i< elements.length;i++){					
					elements[i].style.visibility='visible';
			 }
		}

		function hideSelects(){
			 var elements = document.getElementsByTagName("select");
			 for (i=0;i< elements.length;i++){
			 	act = elements[i].getAttribute("act");
				if(act != 'donthide'){
					elements[i].style.visibility='hidden';
				}
			 }
		}
		
		//////////////////////////////////
		//      Content Functions				//
		//////////////////////////////////

		function addContent(obj,lid){
			myObj = obj;
			var pid = myObj.getAttribute('pid');
			var cid = getcid(myObj);
			if (!myConn) alert("XMLHTTP not available.");
			myConn.connect("admin/ajax.liveedit.php", "POST", "do=addContent&pid="+pid+"&cid="+cid+"&lid="+lid, addContentAction);				
		}
		
		function addContentAction(oXML){
			newdiv = document.createElement('div');
			newdiv.innerHTML = oXML.responseText;
			myObj.parentNode.replaceChild(newdiv.firstChild,myObj);
			//widgInit();
			newdiv = null;
		}
		
		function getcid(container){
			var groups = getElementsByClass('containerGroup');			
			var cid = 0;
			
			for(j=0;j < groups.length;j++){
				var countRemove = 0;
				var containers = getChildNodesByTagName(groups[j],'div');
				for(i=0;i<containers.length;i++){
					if(container == containers[i]){
						cid = i + (j*11);
						cid = cid + 1;
						return cid;
					}
				}	
			}
			
			return container.id;
				
		}
		
		function toggleWidgEditors(boxContainer){
			var container = getElementsByClass('toggleContent',boxContainer,'div')[0];
			if(container.style.display == 'none'){
				var widgContainers = getElementsByClass('widgContainer',container);
				for(var i=widgContainers.length-1;i>=0;i--){
					if(editor = widgContainers[i].getElementsByTagName('input')[0].widgEditorObject){
						editor.backToTextarea();
					}
				}

				var textareas = container.getElementsByTagName('textarea');
				for(var i=textareas.length-1;i>=0;i--){
					textareas[i].id = textareas[i].name + '_' + getcid(boxContainer);
					new widgEditor(textareas[i].id);
				}
				toggleElement(container);
			}			
		}
		
		function editorOpen(container){
			var toggler = getElementsByClass('toggleContent',container,'div')[0];
			if(toggler && toggler.style.display != 'none'){
				return true;
			}else{
				return false;
			}
		}

		function editContent(obj,frmname){
			myObj = obj;
			
			var boxContainer = getBoxContainer(myObj);
			var form = getChildNodesByTagName(boxContainer,'form')[0];
			var type = boxContainer.getAttribute('container_type');
			var pid = boxContainer.getAttribute('pid');
			var cid = getcid(boxContainer);
			
			var title = form.elements["title"].value;
			if(type == 'content'){
				var content = form.elements["content"].value;
				var langid = form.elements["lang_"+cid].value;
			}
			
			if (!myConn) alert("XMLHTTP not available.");
			if(type == 'content'){
				myConn.connect("admin/ajax.liveedit.php", "POST", "do=editContent&pid="+pid+"&cid="+cid+"&title="+escape(title)+"&content="+escape(content)+"&langid="+langid, editContentAction);
			}else if(type == 'module'){
				myConn.connect("admin/ajax.liveedit.php", "POST", "do=editModuleTitle&pid="+pid+"&cid="+cid+"&title="+escape(title), editContentAction);
			}
		}
		
		function showEditModule(boxContainer){
			var pid = boxContainer.getAttribute('pid');
			var cid = getcid(boxContainer);
			window.location = 'admin/edit_module.php?pid='+pid+'&cid='+cid;
		}
		
		function editContentAction(oXML){
		}
		
		function reloadContent(obj,frmname){
			myObj = obj;
			
			var boxContainer = getBoxContainer(myObj);
			var form = getChildNodesByTagName(boxContainer,'form')[0];
			var type = boxContainer.getAttribute('container_type');
			var pid = boxContainer.getAttribute('pid');
			var cid = boxContainer.getAttribute('id');
			
			if(type == 'content'){
				var langid = form.elements["lang_"+cid].value;
			}
			
			// the actual cid = position of container
			cid = getcid(boxContainer);
			
			if (!myConn) alert("XMLHTTP not available.");
			if(type == 'content'){
				//myConn.connect("admin/ajax.liveedit.php", "POST", "do=editContent&pid="+pid+"&cid="+cid+"&title="+escape(title)+"&content="+escape(content)+"&langid="+langid, editContentAction);
				myConn.connect("admin/ajax.liveedit.php", "GET", "do=getContent&pid="+pid+"&cid="+cid+"&langid="+langid, reloadContentAction);
			}else if(type == 'module'){
				//myConn.connect("admin/ajax.liveedit.php", "POST", "do=editModuleTitle&pid="+pid+"&cid="+cid+"&title="+escape(title), editContentAction);
				myConn.connect("admin/ajax.liveedit.php", "GET", "do=getModule&pid="+pid+"&cid="+cid, reloadContentAction);
			}			
		}
		
		function reloadContentAction(oXML){
			newdiv = document.createElement('div');
			newdiv.innerHTML = oXML.responseText;
			myObj = myObj.parentNode.parentNode;
			myObj.parentNode.replaceChild(newdiv.firstChild,myObj);
			//widgInit();
			newdiv = null;
		}

		//////////////////////////////////
		//      Module Functions				//
		//////////////////////////////////
		
//		function editModuleTitle(obj,frmname){
//			myObj = obj;
//				
//			pid = document.forms[frmname].elements["pid"].value;
//			cid = document.forms[frmname].elements["cid"].value;
//			
//			title = document.getElementById("title"+pid+"_"+cid).value;
//			
//			if (!myConn) alert("XMLHTTP not available.");
//			myConn.connect("admin/ajax.liveedit.php", "POST", "do=editModuleTitle&pid="+pid+"&cid="+cid+"&title="+escape(title), editModuleTitleAction);			
//		}
//		
//		function editModuleTitleAction(oXML){
//			myObj.innerHTML = oXML.responseText;
//		}
		
		function drawModuleList(obj){
			myObj = obj;
			var pid = myObj.getAttribute('pid');
			var cid = getcid(myObj);
			if (!myConn) alert("XMLHTTP not available.");
			myConn.connect("admin/ajax.liveedit.php", "POST", "do=drawModuleList&pid="+pid+"&cid="+cid, drawModuleListAction);					
		}
		
		function drawModuleListAction(oXML){
			myObj.innerHTML = oXML.responseText;
		}
		
		function addModule(obj,pid,cid,mid){
			myObj = obj;
			myCID = cid;
			if (!myConn) alert("XMLHTTP not available.");
			myConn.connect("admin/ajax.liveedit.php", "POST", "do=addModule&pid="+pid+"&cid="+cid+"&mid="+mid, addModuleAction);				
		}
		
		function addModuleAction(oXML){				
			newdiv = document.createElement('div');
			newdiv.innerHTML = oXML.responseText;	
			var newContent = newdiv.firstChild;
			myObj.parentNode.replaceChild(newContent,myObj);
			if(con = getElementsByClass('contentContainer',newContent,'div')[0]){
				
				var scr = getChildNodesByTagName(con,'div')[0].getAttribute('jspath');
				
				if(scr!=""){
					alreadyinc = false;
					
					head = document.getElementsByTagName("head")[0];
					incscripts = head.getElementsByTagName("script");
					
					for(i=0;i < incscripts.length; i++){
						if(incscripts[i].src == scr){
							alreadyinc = true;
						}
					}
					
					if(!alreadyinc){
						var e = document.createElement("script");
						e.src = scr;
						e.type="text/javascript";
						document.getElementsByTagName("head")[0].appendChild(e);
					}
				}else{
					alert('javascript could not be included');
				}
			}

			//widgInit();
			newdiv = null;
		}
		
		//////////////////////////////////
		//      Common Functions				//
		//////////////////////////////////
		
		function liveUpdateText(obj){
			if(obj.wysiwyg){
				var container = obj.theContainer.parentNode.parentNode;
//				if(obj.theInput.parentNode.parentNode.previousSibling.nodeName!='FORM'){
//					container = obj.theInput.parentNode.parentNode.previousSibling.parentNode;
//				} else {
//					container = obj.theInput.parentNode.parentNode.previousSibling;
//				}
	
				//textareaid = obj.theTextarea.getAttribute("oldid");
				textareaid = obj.theTextarea.id;
				
				if(!obj.theIframe.contentWindow.document.getElementsByTagName("body")[0]){
					return false;
				}
				
				var title = null;
				var content = null;
				
				if(textareaid.indexOf("title")>=0){
					title = getElementsByClass('contentBoxTitle',container);
					if(title.length==1){
						title[0].innerHTML = obj.theIframe.contentWindow.document.getElementsByTagName("body")[0].innerHTML;
					} else {
						title = getElementsByClass('moduleBoxTitle',container);
						if(title.length==1){
							title[0].innerHTML = obj.theIframe.contentWindow.document.getElementsByTagName("body")[0].innerHTML;
						}
					}
				} else if (textareaid.indexOf("content")>=0) {
					content = getElementsByClass('contentBoxContent',container);
					if(content.length==1){
						content[0].innerHTML = obj.theIframe.contentWindow.document.getElementsByTagName("body")[0].innerHTML;
					}
				}
			}

			return false;
		}
		
		function changeLanguage(sel){
			myObj = getBoxContainer(sel);
			var pid = myObj.getAttribute('pid');
			var cid = getcid(myObj);
			var langid = sel.value;
			if (!myConn) alert("XMLHTTP not available.");
			myConn.connect("admin/ajax.liveedit.php", "POST", "do=getContent&pid="+pid+"&cid="+cid+"&langid="+langid, changeLanguageAction);	
		}
		
		function changeLanguageAction(oXML){
			newdiv = document.createElement('div');
			newdiv.innerHTML = oXML.responseText;
			myObj.parentNode.replaceChild(newdiv.firstChild,myObj);
			//widgInit();
			newdiv = null;
		}
		
		function changeSkin(sel){
			myObj = getBoxContainer(sel);
			
			var pid = myObj.getAttribute('pid');
			var cid = getcid(myObj);
			var skinid = sel.value;
			
			if (!myConn) alert("XMLHTTP not available.");
			myConn.connect("admin/ajax.liveedit.php", "POST", "do=changeSkin&pid="+pid+"&cid="+cid+"&skinid="+skinid, changeSkinAction);	
		}
		
		function changeSkinAction(oXML){
			newdiv = document.createElement('div');
			newdiv.innerHTML = oXML.responseText;
			myObj.parentNode.replaceChild(newdiv.firstChild,myObj);
			//widgInit();
			newdiv = null;
		}
		
		function deleteContent(obj){
			myObj = obj;
			var type = myObj.getAttribute('container_type');
			var pid = myObj.getAttribute('pid');
			var cid = getcid(myObj);;
			
			if(window.confirm('Are you sure you want to delete this '+type+'?')){
				if (!myConn) alert("XMLHTTP not available.");
				if(type=='content'){
					var langid = getChildNodesByTagName(myObj,'form')[0].elements['lang_'+cid].value;
					myConn.connect("admin/ajax.liveedit.php", "POST", "do=deleteContent&pid="+pid+"&cid="+cid+"&langid="+langid, deleteContentAction);				
				} else if(type=='module'){
					myConn.connect("admin/ajax.liveedit.php", "POST", "do=deleteModule&pid="+pid+"&cid="+cid, deleteContentAction);
				}
			}
		}
		
		function deleteContentAction(oXML){
			newdiv = document.createElement('div');
			newdiv.innerHTML = oXML.responseText;
			myObj.parentNode.replaceChild(newdiv.firstChild,myObj);
			//widgInit();
			newdiv = null;
		}
		
		function exitModuleList(obj,pid,cid){
			myObj = obj;
			if (!myConn) alert("XMLHTTP not available.");
			myConn.connect("admin/ajax.liveedit.php", "POST", "do=exitModuleList&pid="+pid+"&cid="+cid, exitModuleListAction);
		}
		
		function exitModuleListAction(oXML){
			newdiv = document.createElement('div');
			newdiv.innerHTML = oXML.responseText;
			myObj.parentNode.replaceChild(newdiv.firstChild,myObj);
			//widgInit();
			newdiv = null;			
		}
		
		function changeMenuState(){
			if(val = getCookie('settingsmenu')){
				if(val=='closed'){
					setCookie('settingsmenu','open');
				} else {
					setCookie('settingsmenu','closed');
				}
			} else {
				setCookie('settingsmenu','closed');
			}
		}
		
		function setCookie(name, value, expires, path, domain, secure) {
			var curCookie = name + "=" + escape(value);
			var curCookie = curCookie + ((expires) ? "; expires=" + expires.toGMTString() : "");
			var curCookie = curCookie + ((path) ? "; path=" + path : "");
			var curCookie = curCookie + ((domain) ? "; domain=" + domain : "");
			var curCookie = curCookie + ((secure) ? "; secure" : "");
			document.cookie = curCookie;
		}
	
		function getCookie(name) {
			var dc = document.cookie;
			var prefix = name + "=";
			var begin = dc.indexOf("; " + prefix);
			
			if (begin == -1) {
				begin = dc.indexOf(prefix);
				if (begin != 0) return null;
			} else
				begin += 2;
			var end = document.cookie.indexOf(";", begin);
			if (end == -1)
				end = dc.length;
			return unescape(dc.substring(begin + prefix.length, end));
		}
		
		//////////////////////////////////
		//   Move Container Functions		//
		//////////////////////////////////

		function moveBoxUp(obj){
			myObj = obj;
			
			pid = myObj.getAttribute('pid');
			type = myObj.getAttribute('container_type');
			
			if(editorOpen(myObj)){
				alert('Cannot move container until changes have been saved or cancelled');
				return;
			}

			
			// if firstChild, can't move so return
			if(myObj == myObj.parentNode.firstChild || (myObj.parentNode.firstChild.nodeName != 'DIV' && myObj.parentNode.firstChild.nextSibling == myObj)){
				return;
			}
			
			if(mySwapObj = obj.previousSibling){
				if(editorOpen(mySwapObj)){
					alert('Cannot move to new position until the changes in that position are saved or cancelled');
					return;
				}
				
				var cid = getcid(myObj);
				var newcid = cid - 1;
				
				swapNodes(myObj,mySwapObj);

				if (!myConn) alert("XMLHTTP not available.");
				myConn.connect("admin/ajax.liveedit.php", "POST", "do=moveBox&pid="+pid+"&cid="+cid+"&newcid="+newcid+"&type="+type, moveBoxUpAction);
			}
		}
		
		function moveBoxUpAction(oXML){
			
		}
		
		function moveBoxDown(obj){
			myObj = obj;
			
			pid = myObj.getAttribute('pid');
			type = myObj.getAttribute('container_type');
			
			if(editorOpen(myObj)){
				alert('Cannot move container until changes have been saved');
				return;
			}
			
			// if last child, can't move so return
			if(myObj == myObj.parentNode.lastChild || (myObj.parentNode.lastChild.nodeName != 'DIV' && myObj.parentNode.lastChild.previousSibling == myObj)){
				return;
			}
			
			if(mySwapObj = myObj.nextSibling){
				if(editorOpen(mySwapObj)){
					alert('Cannot move to new position until the changes in that position are saved or cancelled');
					return;
				}				
				
				var cid = getcid(myObj);
				var newcid = cid + 1;
				
				swapNodes(myObj,mySwapObj);

				if (!myConn) alert("XMLHTTP not available.");
				myConn.connect("admin/ajax.liveedit.php", "POST", "do=moveBox&pid="+pid+"&cid="+cid+"&newcid="+newcid+"&type="+type, moveBoxDownAction);	
			}
		}
		
		function moveBoxDownAction(oXML){
			
		}
		
		function moveBoxLeft(obj){
			myObj = obj;
			
			pid = myObj.getAttribute('pid');
			type = myObj.getAttribute('container_type');
			
			if(editorOpen(myObj)){
				alert('Cannot move container until changes have been saved');
				return;
			}
			
			var groups = getElementsByClass('containerGroup');
			var myCol;
			var swapCol;
			
			//if myObj containergroup is the leftmost one, return as can't move
			if(myObj.parentNode == groups[0]){
				return;
			}
			for(var i=0;i<groups.length;i++){
				if(myObj.parentNode == groups[i]){
					myCol = groups[i];
					swapCol = groups[i-1];
				}
			}
			
			var cid = getcid(myObj);
			newcid = cid - 11;
			
			if(mySwapObj = getChildNodesByTagName(swapCol,'div')[(newcid-1)%11]){
				if(editorOpen(mySwapObj)){
					alert('Cannot move to new position until the changes in that position are saved or cancelled');
					return;
				}
				
				swapNodes(myObj,mySwapObj);
					
				if (!myConn) alert("XMLHTTP not available.");
				myConn.connect("admin/ajax.liveedit.php", "POST", "do=moveBox&pid="+pid+"&cid="+cid+"&newcid="+newcid+"&type="+type, moveBoxRightAction);
			}else{
				alert('cant swap');
			}
			
			return;
		}
		
		function moveBoxLeftAction(oXML){
			
		}

		function moveBoxRight(obj){
			myObj = obj;
			
			pid = myObj.getAttribute('pid');
			type = myObj.getAttribute('container_type');
			
			if(editorOpen(myObj)){
				alert('Cannot move container until changes have been saved');
				return;
			}
			
			var groups = getElementsByClass('containerGroup');
			var myCol;
			var swapCol;
			
			//if myObj containergroup is the rightmost one, return as can't move
			if(myObj.parentNode == groups[groups.length-1]){
				return;
			}
			for(var i=0;i<groups.length;i++){
				if(myObj.parentNode == groups[i]){
					myCol = groups[i];
					swapCol = groups[i+1];
				}
			}
			
			var cid = getcid(myObj);
			newcid = cid + 11;
			
			if(mySwapObj = getChildNodesByTagName(swapCol,'div')[(newcid-1)%11]){
				if(editorOpen(mySwapObj)){
					alert('Cannot move to new position until the changes in that position are saved or cancelled');
					return;
				}
				
				swapNodes(myObj,mySwapObj);
					
				if (!myConn) alert("XMLHTTP not available.");
				myConn.connect("admin/ajax.liveedit.php", "POST", "do=moveBox&pid="+pid+"&cid="+cid+"&newcid="+newcid+"&type="+type, moveBoxRightAction);
			}
			
			return;
			
			//var newtest = getElementsByClass('containerGroup');
//			
//			for(j=0;j < newtest.length;j++){
//				var countRemove = 0;
//				for(i=0;i<newtest[j].childNodes.length;i++){
//					if(newtest[j].childNodes[i].nodeName != "DIV"){
//						countRemove = countRemove + 1;
//					}
//					if(myObj == newtest[j].childNodes[i]){
//						tmpcol = j;
//						tmpcid = i;
//						j = newtest.length;
//						break;
//					}
//				}
//			}
//			
//			if(newtest[tmpcol+1]){
//				if(mySwapObj = newtest[tmpcol+1].childNodes[tmpcid]){
//					cid = (tmpcid + (tmpcol*7))+1;
//					newcid = (tmpcid + ((tmpcol+1)*7))+1;
//					//cid = myObj.id;
//					//newcid = mySwapObj.id;
//					
//					//alert(cid);
//					//alert(newcid);
//					
//					cid = cid - countRemove;
//					newcid = newcid - countRemove;
//	
//					swapNodes(myObj,mySwapObj);
//					
//					if (!myConn) alert("XMLHTTP not available.");
//					myConn.connect("admin/ajax.liveedit.php", "POST", "do=moveBox&pid="+pid+"&cid="+cid+"&newcid="+newcid+"&type="+type, moveBoxRightAction);					
//				}
//			}
		}
		
		function moveBoxRightAction(oXML){

		}
		
//		function swapNodes(node1, node2){
//			var node2copy = node2.cloneNode(true);
//			var node1copy = node1.parentNode.replaceChild(node2copy,node1);
//			node2.parentNode.replaceChild(node1copy,node2);
//		}
		
		function swapNodes(node1, node2){
			var node1parent = node1.parentNode;
			var node2parent = node2.parentNode;
			var node1sibling = node1.nextSibling;
			var node2sibling = node2.nextSibling;
			
			if(node2sibling){
				node2parent.insertBefore(node1,node2sibling);
			}else{
				node2parent.appendChild(node1);
			}
			if(node1sibling){
				node1parent.insertBefore(node2,node1sibling);
			}else{
				node1parent.appendChild(node2);
			}
		}
		
		function getElementsByClass(searchClass,node,tag) {
			var classElements = new Array();
			if ( node == null )
				node = document;
			if ( tag == null )
				tag = '*';
			var els = node.getElementsByTagName(tag);
			var elsLen = els.length;
			var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
			for (i = 0, j = 0; i < elsLen; i++) {
				if ( pattern.test(els[i].className) ) {
					classElements[j] = els[i];
					j++;
				}
			}
			return classElements;
		}

		function getElementsByClassName(searchClass,node,tag) {
			var classElements = new Array();
			if ( node == null )
				node = document;
			if ( tag == null )
				tag = '*';
			var els = node.getElementsByTagName(tag);
			var elsLen = els.length;
			var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
			for (i = 0, j = 0; i < elsLen; i++) {
				if ( pattern.test(els[i].className) ) {
					classElements[j] = els[i];
					j++;
				}
			}
			return classElements;
		}
		
		function getChildNodesByTagName(node,tag){
			tag = tag.toUpperCase();
			var children = new Array();
			for(var i=0,j=0;i<node.childNodes.length;i++){
				if(node.childNodes[i].nodeName == tag){
					children[j++] = node.childNodes[i];
				}
			}
			return children;
		}
		
		function getBoxContainer(el){
			if(typeof(el) != 'object'){
				el = document.getElementById(el);
			}
			
			var container = el;
			while(container.className != 'boxContainer' && container.nodeName != 'BODY'){
				container = container.parentNode;
			}
			
			if(container.className != 'boxContainer'){
				alert('error 491 encountered. please contact site administrator');
				return false;
			}
			
			return container;
		}