var componentsShuffling=0; // GLOBAL tracks all components requested
var componentsAttached=0; // GLOBAL tracks all components requested
var componentsAttachedLoaded=0; // GLOBAL tracks all component load completions for comparison against componentsAttached	
var onInitialise=Array(); // GLOBAL later populated with component references for initialising control view
var recursive_member_ref_list=Array(); // used later to ignore memberRef nodes in data xml when searching dom for component instances
var recursive_ref_list=Array(); // used later to ignore memberRef nodes in data xml when searching dom for component instances
var init_data=null;
function CMSsaveChanges(formname) {
	document.forms[formname].submit();
	
}
function CMSremoveItem(formname) {
	document.forms[formname].deleteflag.value=1; 
	document.forms[formname].submit();
}
function CMSinsertComponentOrderingControls(target,membername,css,ref,init_data,section_definition,initialNodeName){

// adds system reordering component

	var load = new Request({
		'url' : 'components/__reorderItems.php', 
		'method' : 'get', 
		onSuccess: function(responseText, responseXML) {
			var newdiv = new Element('div',{'class' : 'CMSreorderItems'});
			newdiv.innerHTML=responseText;
			newdiv.injectTop(target);
			componentsAttachedLoaded++;
			CMSinitialiseComponents(onInitialise,componentsAttached,componentsAttachedLoaded,init_data,section_definition,initialNodeName);
		}
	}).send('name='+membername+'&css='+css+'&ref='+ref);
}

function CMSinsertComponent(target,membername,css,ref,allowedFileTypes,values,recursive,type,labelname,init_data,section_definition,initialNodeName){

// adds user defined component

	//alert("values is "+values);
	var load = new Request.HTML({
		'url' : 'components/'+type+'.php', 
		'method' : 'get', 
		onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {

			var newdiv = new Element('div');
			newdiv.innerHTML=responseHTML;
			newdiv.inject(target);
			componentsAttachedLoaded++;
			CMSinitialiseComponents(onInitialise,componentsAttached,componentsAttachedLoaded,init_data,section_definition,initialNodeName);
			//$exec(responseJavaScript);
		}
	}).send('name='+membername+'&css='+css+'&ref='+ref+'&values='+values+'&allowedFileTypes='+allowedFileTypes);
}
function CMSinsertAddOneMoreButton(target,membername,css,ref,init_data,section_definition,initialNodeName){

// adds system 'add one more' component

	var load = new Request({
		'url' : 'components/__addOneMore.php', 
		'method' : 'get', 
		onSuccess: function(responseText, responseXML) {
			var newdiv = new Element('div');
			newdiv.innerHTML=responseText;
			newdiv.injectAfter(target);
			componentsAttachedLoaded++;
			CMSinitialiseComponents(onInitialise,componentsAttached,componentsAttachedLoaded,init_data,section_definition,initialNodeName);
		}
	}).send('name='+membername+'&css='+css+'&ref='+ref);
}
function CMSinitialiseComponents(onInitialise,components_requested,components_completed,init_data,section_definition,initialNodeName) {
	// checks total components requested for this view and compares against completed components
	// if they match, load is complete so initialise components to stems, clone, then arrange view
	if (components_requested==components_completed){
		for (var i=(onInitialise.length-1);i>=0;i--) {
			onInitialise[i][0].style.display="none";
			CMSaddItem(onInitialise[i][0],onInitialise[i][1]);
		}
		placeInterface();


		if (typeof(init_data)=='object') populateItems(init_data,section_definition,initialNodeName);
	}
}
function populateItems(init_data,section_definition,initialNodeName){
	var item=init_data.getElementsByTagName('item');
	var startNode=item[0];
	var rootNode=startNode;
	processSourceNodes(startNode,rootNode,initialNodeName);
}

function grabNodeDomIndex(element){
	var position=0;
	if (Browser.Engine.trident==true) {
		var siblings=new Array();
		var tgelement=element;
		while(tgelement.previousSibling){
			siblings.push(tgelement.previousSibling);		
//			__assetbankfolder="'.$pageData['assetFolder'].'";
//			__rootpath="'.$pageData['rootPath'].'";
//			__assetRequester=null;
//			__assetRequesterType=null;
//			__assetBankTicker=null;
//			__assetBankArray=new Array(Array());
			tgelement=tgelement.previousSibling;
		}	
	}
	else {
		var siblings=element.getAllPrevious();
	}
	if (siblings.length>0) {
		siblings.each(function(el){
			if (el.nodeName==element.nodeName) {
				position++
			}
		});						
	}
	return position;
}
function grabNodeDomRef(element,rootNode,initialNodeName,addButton){
	var nodepath=grabNodeDomIndex(element);
	if (addButton==true) {
		nodepath=-1;
	}
	if (in_array(element.nodeName,recursive_member_ref_list)) {
		nodepath="["+element.parentNode.nodeName+"]["+nodepath+"]";
	}
	else if (in_array(element.nodeName,recursive_ref_list)) {
		nodepath="";
	}
	else nodepath="["+element.nodeName+"]["+nodepath+"]";
	while(element.parentNode!=rootNode) {
		element=element.parentNode;
		var parentnodepath=grabNodeDomIndex(element);
		if (in_array(element.nodeName,recursive_member_ref_list)) {
			parentnodepath="["+element.parentNode.nodeName+"]["+parentnodepath+"]";
		}
		else if (in_array(element.nodeName,recursive_ref_list)) {
			parentnodepath="";
		}
		else parentnodepath="["+element.nodeName+"]["+parentnodepath+"]";
		nodepath=parentnodepath+nodepath;
	}
	return initialNodeName+nodepath;
}
function processSourceNodes(startNode,rootNode,initialNodeName){
	processSourceNode(startNode,rootNode,initialNodeName);
	if (Browser.Engine.trident==true) {
		var siblings=Array();
		var element=startNode;
		while(element.nextSibling){
			siblings.push(element.nextSibling);
			element=element.nextSibling;
		}	
	}
	else {
		var siblings=startNode.getAllNext();
	}
	if (siblings.length>0) {
		siblings.each(function(el){
			if (Browser.Engine.trident==true) {
				if (el.previousSibling){
					if (el.nodeName==el.previousSibling.nodeName) {
	
					// we have recursion, run add one more function
						var path=grabNodeDomRef(el,rootNode,initialNodeName,true)+"_addOneMore";
						var addBt= document.getElementById(path);
							CMSaddItem(addBt,addBt.title);
					}
				}
			}
			else {
				if (el.getPrevious()){
					if (el.nodeName==el.getPrevious().nodeName) {
	
					// we have recursion, run add one more function
						var path=grabNodeDomRef(el,rootNode,initialNodeName,true)+"_addOneMore";
						var addBt= document.getElementById(path);
						CMSaddItem(addBt,addBt.getProperty('title'));
					}
				}
			}
			processSourceNode(el,rootNode,initialNodeName);

		});
	}
}
function processSourceNode(startNode,rootNode,initialNodeName){
	if (startNode.hasChildNodes()){
		if (startNode.firstChild.nodeValue!=null) {
			var tg=document.id(grabNodeDomRef(startNode,rootNode,initialNodeName,false)+"[value]");
			if (tg)assignValue(tg,unescape(urldecode(startNode.firstChild.nodeValue)),false);
			else alert("problem finding "+grabNodeDomRef(startNode,rootNode,initialNodeName,false)+"[value]");
			var tg=document.id(grabNodeDomRef(startNode,rootNode,initialNodeName,false)+"[value]_originalValue");
			if (tg)assignValue(tg,unescape(urldecode(startNode.firstChild.nodeValue)),true);
			else alert("problem finding "+grabNodeDomRef(startNode,rootNode,initialNodeName,false)+"[value]_originalValue");			
		}
	}
	if (Browser.Engine.trident==true) {
		if (startNode.hasChildNodes()){
			var child=startNode.firstChild;
			if (child) {
				processSourceNodes(child,rootNode,initialNodeName);
			}
		}
	}
	else {
		var child=startNode.getFirst();
		if (child) {
			processSourceNodes(child,rootNode,initialNodeName);
		}
	}
}
function assignValue(element,value,skip){
	if (element) {
		element.value=value;
		if (skip!=true){
			if (Browser.Engine.trident==true) {
		// ie way is a bit simpler
				if (element.onchange) element.onchange();
			}
			else {
		// every other browser

				element.fireEvent('change');
			}
		}
	}
}

function pausecomp(millis) 
{
var date = new Date();
var curDate = null;

do { curDate = new Date(); } 
while(curDate-date < millis);
} 
function countProperties(obj) {
  var prop;
  var propCount = 0;
  
  for (prop in obj) {
    propCount++;
  }
  return propCount;
}
function parseConfigFile(filepath,mode,init_data,assetBankFolder,rootPath,language) {
	__assetbankfolder=assetBankFolder;
	__rootpath=rootPath;
	__assetRequester=null;
	__assetRequesterType=null;
	__assetBankTicker=null;
	__assetBankArray=new Array(Array());

	if (init_data!=""){
		var init_data='gateway/'+(filepath.replace('.xml','.php').substring(7))+'?lang='+language+'&section='+mode+'&where=id,is,'+init_data;
		var init_data_xml = new Request({'url' : init_data, 'method' : 'get', onSuccess: function(responseText, responseXML) {
			parseConfigFile2(filepath,mode,responseXML);
		}}).send();
	}
	else parseConfigFile2(filepath,mode,false);
}
function parseConfigFile2(filepath,mode,init_data) {
	var i=0;
	while(document.id('CMSformholder['+mode+']['+i+']')) {
		i++;
	}
	var holder = new Element('div',{'id' : 'CMSformholder['+mode+']['+i+']'}) ;
	holder.injectInside(document.id('CMSformholder'));
	var CMSconfig = new Request({'url' : filepath, 'method' : 'get', onSuccess: function(responseText, responseXML) {
		var node = responseXML.getElementsByTagName('section');
		var xmlPath="";
		for (var i=0; i<node.length;i++) {
			var alerttxt="";
			if (node[i].getAttribute('groupName')==mode) {

		// located the required section node in xml
			
				var initialNodeName=holder.get('id');
				var rootNode=node[i];
				var section_definition=rootNode;
				var datasets=rootNode.getElementsByTagName('data');

				for (var j=0;j<datasets.length;j++) {
					var data=datasets[j];
					if (data.getAttribute('memberRef')) {
						recursive_member_ref_list.push(data.getAttribute('memberRef'));
						recursive_ref_list.push(data.getAttribute('ref'));
					}
				}
				for (var j=0;j<datasets.length;j++) {

			// for each data node within the matched section

					var data=datasets[j];
					var dataPath="";
					var dataParent=data.parentNode;
					while (dataParent!=rootNode) {
						dataPath='['+dataParent.getAttribute('ref')+'][-1]'+dataPath;
						dataParent=dataParent.parentNode;
					}

					var CMScomponent = new Element('div',{
						'id' : initialNodeName+dataPath+'['+data.getAttribute('ref')+'][-1]'
					});
					
					if (data.getAttribute('memberName')) var membername=data.getAttribute('memberName');
					else var membername=data.getAttribute('name');
					onInitialise.push(Array(CMScomponent,membername));
					var CMScomponentOrderGroup = new Element('div',{
						'id' : 'group_'+initialNodeName+dataPath+'['+data.getAttribute('ref')+'][-1]',
						'class' : 'CMSgroupBlockHolder'
					});

					CMScomponentOrderGroup.injectInside(CMScomponent);
					

				// insert ordering component if its a recursive datatype

					if (data.getAttribute('recursive')=="true") {
						componentsAttached++;
						if (data.getAttribute('memberName')) var membername=data.getAttribute('memberName');
						else var membername=data.getAttribute('name');
						var css=data.getAttribute('css');
						var ref=CMScomponent.get('id');
						var target=CMScomponentOrderGroup;
						CMSinsertComponentOrderingControls(target,membername,css,ref,init_data,section_definition,initialNodeName)
					}

				// insert component template 
					if (data.getAttribute('type')!="dataGroup") {
						componentsAttached++;
						var ref=initialNodeName+dataPath+"["+data.getAttribute('ref')+"][-1]"+"[value]"
						var recursive=data.getAttribute('recursive');						
						var type=data.getAttribute('type');						
						if (data.getAttribute('memberName')) var membername=data.getAttribute('memberName');
						else var membername=data.getAttribute('name');
						var labelname=data.getAttribute('name');
						var allowedFileTypes=data.getAttribute('allowedFileTypes');
						var values=data.getAttribute('values');
						var css=data.getAttribute('css');
						var target=CMScomponentOrderGroup;
						CMSinsertComponent(target,membername,css,ref,allowedFileTypes,values,recursive,type,labelname,init_data,section_definition,initialNodeName)
					}

				// if recursive add 'Add one more' button

					if (data.getAttribute('recursive')=="true") {
						componentsAttached++;
						var ref=CMScomponent.get('id');
						if (data.getAttribute('memberName')) var membername=data.getAttribute('memberName');
						else var membername=data.getAttribute('name');
						var css=data.getAttribute('css');
						var target=CMScomponent;
						CMSinsertAddOneMoreButton(target,membername,css,ref,init_data,section_definition,initialNodeName);
					}

				// attach label, controls and component to component holder, then place component holder in the dom
					var CMScomponentControlHolder = new Element('div',{'class' : 'CMSformControl'}) ;
					CMScomponent.inject(CMScomponentControlHolder);

					var CMScomponentHolder = new Element('div',{'class' : 'CMSformComponentHolder'}) ;
					CMScomponentControlHolder.inject(CMScomponentHolder);

					var CMScomponentLabel = new Element('div',{'class' : 'CMSformLabel'}) ;

					var tooltiptext=data.getElementsByTagName("tooltip")[0].firstChild.nodeValue;
					
					var CMScomponentLabelTextHolder = new Element('div',{'class' : 'CMSformLabelText', 'text' : data.getAttribute('name')}) ;
					
					var CMScomponentTooltipHolder = new Element('div',{'class' : 'CMStooltip'}) ;
					
		
					CMScomponentTooltipHolder.store('tooltiptext',tooltiptext);
					CMScomponentTooltipHolder.addEvent('mouseenter', function(event){
						this.mousex=event.page.x;
						this.mousey=event.page.y;
						var assetManage = new Element('div',{ 
							'class' : 'CMStooltipShow',
							styles: {
								position : 'absolute', 
								top : (this.mousey+10)+"px", 
								left : (this.mousex+10)+"px"
							}
						});
						assetManage.set('text', this.retrieve('tooltiptext'));

						
						this.store('tooltip',assetManage);
						assetManage.inject(document.id(document.body));
					});
					CMScomponentTooltipHolder.addEvent('mouseleave', function(){
						this.retrieve('tooltip').destroy();
					});				
			
					
					CMScomponentLabelTextHolder.inject(CMScomponentLabel);
					CMScomponentLabel.injectTop(CMScomponentHolder);
					CMScomponentTooltipHolder.injectTop(CMScomponentLabelTextHolder);

					var cleardiv = new Element('div',{'class' : 'clearer'}) ;
					cleardiv.inject(CMScomponentHolder);

					var CMScomponentGroupHolder=document.id(initialNodeName+dataPath);
					CMScomponentHolder.inject(CMScomponentGroupHolder);



					}
				}
			}
		}
	}).send();
}

function CMSresetValue(node) {
	var origvalId=node.id.replace('_resetValue','_originalValue'); 
	var currId=node.id.replace('_resetValue',''); 
	var curr=document.id(currId);
	var origval=document.id(origvalId);
	curr.value=origval.value;
	if (Browser.Engine.trident==true) {
// ie way is a bit simpler
		if (curr.onchange)curr.onchange();
	}
	else {
// every other browser
		curr.fireEvent('change');
	}	
}

function CMSaddItem(node,itemname) {
	// working correctly, but complex and pre mootools, should be optimised
	var sourceId=node.id.replace('_addOneMore',''); 
	var targetId=sourceId.replace('/_cloneStem/g','0'); 
	var targetIdArray=targetId.split('['); 
	var thisnewarraynum=targetIdArray.pop(); 
	thisnewarraynum=(parseInt(thisnewarraynum.replace(']',''))); 
	while (document.id(targetIdArray.join('[')+'['+thisnewarraynum+']')) {
		thisnewarraynum++;
	}
	targetId=targetIdArray.join('[')+'['+thisnewarraynum+']'; 
	if (thisnewarraynum==0) thisprevsibling=sourceId; 
	else thisprevsibling=targetIdArray.join('[')+'['+(thisnewarraynum-1)+']'; 
	placeAfter=document.id(thisprevsibling);
	sourcenode=document.id(sourceId);
	sourceclone=sourcenode.cloneNode(true);
	sourceclone.setAttribute('id',targetId);
	var childrenOfNewNode=sourceclone.getElements('');
	var newNodeInputBase=null;
	for (var i=0; i<childrenOfNewNode.length;i++) {
		if (childrenOfNewNode[i].id) {
			childrenOfNewNode[i].id=childrenOfNewNode[i].id.replace(sourceId,targetId);
		}
		if (childrenOfNewNode[i].name) {
			childrenOfNewNode[i].name=childrenOfNewNode[i].name.replace(sourceId,targetId);
			var nn=childrenOfNewNode[i].name;
			if (nn.substring(nn.length-7)=='[value]'){
				var newNodeInputBase=childrenOfNewNode[i];
			}
		}
	}	
	sourceclone.injectAfter(placeAfter);
	if (document.id(targetId+'_reorderItemMemberName')) {
		var newitemname=itemname+" "+(thisnewarraynum+1);
		document.id(targetId+'_reorderItemMemberName').firstChild.nodeValue=newitemname; 
		if (thisnewarraynum=="0") document.id(targetId+'_reorderItemMoveUp').style.display="none";
		if (thisnewarraynum>0){
			for (var z=(thisnewarraynum-1);z<thisnewarraynum;z++) {
				document.id(targetIdArray.join('[')+'['+z+']'+'_reorderItemMoveDown').style.display="inline";		
			}
		}
		document.id(targetId+'_reorderItemMoveDown').style.display="none";		
	}
	sourceclone.style.display="block";
	sourceclone.style.overflow="hidden";
	if (newNodeInputBase!=null){
		if (Browser.Engine.trident==true) {
	// ie way is a bit simpler
			if (newNodeInputBase.onchange)newNodeInputBase.onchange();
		}
		else {
	// every other browser
			var onchange=newNodeInputBase.onchange;
//			newNodeInputBase.set('onchange','');
			newNodeInputBase.removeEvents('change');
			newNodeInputBase.addEvent('change', onchange);
			newNodeInputBase.fireEvent('change');
		}
// located basic value storage for component, populate it and run the onchange function (used for initialising component view)

	}
	placeInterface();

}

function CMSmarkForDeletion(sourcenodeid) {
	var sourcenode=document.id(sourcenodeid);
	var isenabled=document.id(sourcenodeid+"[isEnabled]");
	isenabled.value="0";
	var reordercontrols = sourcenode.getElement('.reorderControls');
	reordercontrols.style.display='none';
	var restorecontrols = sourcenode.getElement('.undoDelete');
	restorecontrols.style.display='block';
	var myEffect = new Fx.Morph(sourcenode, {duration: 100, transition: Fx.Transitions.Sine.easeOut});
	myEffect.start('.CMSPendingDeletion');
}

function CMSundoDeletion(sourcenodeid) {
	var sourcenode=document.id(sourcenodeid);
	var isenabled=document.id(sourcenodeid+"[isEnabled]");
	isenabled.value="1";
	var restorecontrols = sourcenode.getElement('.undoDelete');
	restorecontrols.style.display='none';
	var reordercontrols = sourcenode.getElement('.reorderControls');
	reordercontrols.style.display='block';
	CMSmaximizeItem(sourcenodeid);
}

function CMSmaximizeItem(sourcenodeid,jump) {
	var sourcenode=document.id(sourcenodeid);
	var contentsHeight=sourcenode.getScrollSize();
	var myEffect = new Fx.Tween(sourcenode, {duration: 100, onComplete: function() {
	// must trigger maximisation for parent nodes that are recursive in order to account for potential height increase of this element once
		var potentialParentRecursionTrigger=sourcenode.parentNode.parentNode.parentNode.firstChild.firstChild;
		if (potentialParentRecursionTrigger.className=="CMSreorderItems"){
			CMSmaximizeItem(sourcenode.parentNode.parentNode.parentNode.id);
		}
		
	}, transition: Fx.Transitions.Sine.easeOut});
	if (jump==1) myEffect.set('height',contentsHeight.y);
	else myEffect.start('height',contentsHeight.y);
//	sourcenode.style.overflow='visible';
	sourcenode.getElements('object').setStyle('display', 'block');
	sourcenode.getElements('embed').setStyle('display', 'block');
}

function CMSminimizeItem(sourcenodeid) {
	var sourcenode=document.id(sourcenodeid);
	var myEffect = new Fx.Tween(sourcenode, {duration: 100, transition: Fx.Transitions.Sine.easeOut});
	myEffect.start('height','46');
	sourcenode.style.overflow='hidden';
	sourcenode.getElements('object').setStyle('display', 'none');
	sourcenode.getElements('embed').setStyle('display', 'none');
}

function CMSreorderItems(sourcenodeid,targetnodeid,action) {
	componentsShuffling=1;
	// working correctly, but complex and pre mootools, should be optimised
	
	var sourcenode=document.id(sourcenodeid);
	var targetnode=document.id(targetnodeid);


	var run_onchange_check=sourcenode.getElements('');
	for (var i=0; i<run_onchange_check.length;i++) {
		if (Browser.Engine.trident==true) {
			if (run_onchange_check[i].onchange)run_onchange_check[i].onchange();
		}
		else {
			var onchange=run_onchange_check[i].onchange;
//			newNodeInputBase.set('onchange','');
			if (onchange!=undefined){
				run_onchange_check[i].removeEvents('change');
				run_onchange_check[i].addEvent('change', onchange);
				run_onchange_check[i].fireEvent('change');
			}
		}
	}
	var run_onchange_check2=targetnode.getElements('');
	for (var i=0; i<run_onchange_check2.length;i++) {
		if (Browser.Engine.trident==true) {
			if (run_onchange_check2[i].onchange)run_onchange_check2[i].onchange();
		}
		else {
			var onchange=run_onchange_check2[i].onchange;
//			newNodeInputBase.set('onchange','');
			if (onchange!=undefined){
				run_onchange_check2[i].removeEvents('change');
				run_onchange_check2[i].addEvent('change', onchange);
				run_onchange_check2[i].fireEvent('change');
			}
		}
	}

	var holder=sourcenode.parentNode;
	var sourceclone=sourcenode.cloneNode(true);
	var targetclone=targetnode.cloneNode(true);
	sourceclone.setAttribute('id',targetnodeid);
	var childrenOfNewNode=sourceclone.getElements('');
	var childrenOfOriginalNode=sourcenode.getElements('');
	for (var i=0; i<childrenOfNewNode.length;i++) {
		childrenOfNewNode[i].value=childrenOfOriginalNode[i].value;
		if (childrenOfNewNode[i].id) {
			childrenOfNewNode[i].id=childrenOfNewNode[i].id.replace(sourcenodeid,targetnodeid);
		}
		if (childrenOfNewNode[i].name) {
			childrenOfNewNode[i].name=childrenOfNewNode[i].name.replace(sourcenodeid,targetnodeid);
		}
	}	
	targetclone.setAttribute('id',sourcenodeid);
	var childrenOfNewNode=targetclone.getElements('');
	var childrenOfOriginalNode=targetnode.getElements('');
	for (var i=0; i<childrenOfNewNode.length;i++) {
		childrenOfNewNode[i].value=childrenOfOriginalNode[i].value;
		if (childrenOfNewNode[i].id) {
			childrenOfNewNode[i].id=childrenOfNewNode[i].id.replace(targetnodeid,sourcenodeid);
		}
		if (childrenOfNewNode[i].name) {
			childrenOfNewNode[i].name=childrenOfNewNode[i].name.replace(targetnodeid,sourcenodeid);
		}
	}	
	holder.replaceChild(targetclone,sourcenode);
	holder.replaceChild(sourceclone,targetnode);

	var targetIdArray=targetnodeid.split('['); 
	var targetarraynum=targetIdArray.pop(); 
	targetarraynum=(parseInt(targetarraynum.replace(']',''))); 

	var sourceIdArray=sourcenodeid.split('['); 
	var sourcearraynum=sourceIdArray.pop(); 
	sourcearraynum=(parseInt(sourcearraynum.replace(']',''))); 


	if (document.id(targetIdArray.join('[')+'['+targetarraynum+']'+'_reorderItemMemberName')) {
		var newtargetname=document.id(sourceIdArray.join('[')+'['+sourcearraynum+']'+'_reorderItemMemberName').firstChild.nodeValue;
		var newsourcename=document.id(targetIdArray.join('[')+'['+targetarraynum+']'+'_reorderItemMemberName').firstChild.nodeValue;
		document.id(targetIdArray.join('[')+'['+targetarraynum+']'+'_reorderItemMemberName').firstChild.nodeValue=newtargetname;
		document.id(sourceIdArray.join('[')+'['+sourcearraynum+']'+'_reorderItemMemberName').firstChild.nodeValue=newsourcename;
		if (targetarraynum=="0") document.id(targetIdArray.join('[')+'['+targetarraynum+']'+'_reorderItemMoveUp').style.display="none";
		else document.id(targetIdArray.join('[')+'['+targetarraynum+']'+'_reorderItemMoveUp').style.display="inline";
		if (sourcearraynum=="0") document.id(sourceIdArray.join('[')+'['+sourcearraynum+']'+'_reorderItemMoveUp').style.display="none";
		else document.id(sourceIdArray.join('[')+'['+sourcearraynum+']'+'_reorderItemMoveUp').style.display="inline";
		if (document.id(sourceIdArray.join('[')+'['+(sourcearraynum+1)+']')) {
			document.id(sourceIdArray.join('[')+'['+sourcearraynum+']'+'_reorderItemMoveDown').style.display="inline";
		}
		else document.id(sourceIdArray.join('[')+'['+sourcearraynum+']'+'_reorderItemMoveDown').style.display="none";
		if (document.id(targetIdArray.join('[')+'['+(targetarraynum+1)+']')) {
			document.id(targetIdArray.join('[')+'['+targetarraynum+']'+'_reorderItemMoveDown').style.display="inline";
		}
		else document.id(targetIdArray.join('[')+'['+targetarraynum+']'+'_reorderItemMoveDown').style.display="none";
	}
	componentsShuffling=0;
	var run_onchange_check=sourceclone.getElements('');
	for (var i=0; i<run_onchange_check.length;i++) {
		if (Browser.Engine.trident==true) {
			if (run_onchange_check[i].onchange)run_onchange_check[i].onchange();
		}
		else {
			var onchange=run_onchange_check[i].onchange;
			if (onchange!=undefined){
				run_onchange_check[i].removeEvents('change');
				run_onchange_check[i].addEvent('change', onchange);
				run_onchange_check[i].fireEvent('change');
				
			}
		}
	}
	var run_onchange_check2=targetclone.getElements('');
	for (var i=0; i<run_onchange_check2.length;i++) {
		if (Browser.Engine.trident==true) {
			if (run_onchange_check2[i].onchange)run_onchange_check2[i].onchange();
		}
		else {
			var onchange=run_onchange_check2[i].onchange;
			if (onchange!=undefined){
				run_onchange_check2[i].removeEvents('change');
				run_onchange_check2[i].addEvent('change', onchange);
				run_onchange_check2[i].fireEvent('change');
			}

		}
	}

}



function buildNav(whichnav,shiftdown) {
	var CMSloader=document.id("CMSloader");
	var owner=document.id("mainNav"+whichnav);
	var target=document.id("subNav"+whichnav);
	var coords=getAbsolutePosition(owner);
	var loadercoords=getElementSize(CMSloader);
	var dimensions=getElementSize(owner);
	target.style.display="none";
	target.style.position="absolute";
//	alert(coords.y-loadercoords[1]);
	target.style.top=((dimensions[1]+(coords.y-loadercoords[1]))-shiftdown)+"px";
	target.style.left=(coords.x-1)+"px";
}





function showAssetBank(){
//	alert(__assetRequester);
	document.id('CMSassetBank').style.display='block'; 
	document.id('CMSassetBankFileWindow').style.display='block'; 
	document.id('CMSassetBankFileDisplayWindow').style.display='block'; 
	document.id('CMScloseAssetBank').style.display='block'; 
	getAssetBank();
	
}
function closeUploadWindow(){
	document.id("CMSuploadContainer").style.display="none";
}
function hideAssetBank(){
	document.id('CMSassetBankFilePreviewHolder').style.display="none";
	document.id('CMSassetAssign').style.display="none";
	document.id('CMSassetAssignNoAsset').style.display="none";
	document.id('CMSassetAssignCancel').style.display="none";
	document.id("CMSuploadContainer").style.display="none";
	document.id('CMSassetBankFileWindow').style.display='none'; 
	document.id('CMSassetBankFileDisplayWindow').style.display='none'; 
	document.id('CMSassetBank').style.display='none'; 
	document.id('CMScloseAssetBank').style.display='none'; 

// not doing auto reload
//	clearInterval(__assetBankTicker);


	__assetRequesterType=null;
	__assetBankTicker=null;
	__assetRequester=null;
	document.id("CMSmainHolder").focus(); 
}

function getAssetBank() {
	var types="";
	if (__assetRequester!=null){
		var validTypesHolderId=__assetRequester.id;
		var validTypesHolderId=validTypesHolderId.replace('[value]','[value]_validFiletypes');
		var validTypesHolder=document.id(validTypesHolderId);
		types=validTypesHolder.value;
	}

	var target=document.id('CMSassetBankFileWindowContents');
	while (target.hasChildNodes()) target.removeChild(target.lastChild);
	target.style.background="url('aload1.gif')";
	target.style.backgroundRepeat="no-repeat";
	target.style.backgroundPosition="50% 50%";

	var assets = new Request({
		'url' : 'getassetbank.php', 
		'method' : 'get', 
		onSuccess: function(responseText, responseXML) {
			var node = responseXML.getElementsByTagName('asset');
			for (var i = 0; i < node.length; i++) {
				var linkholder = new Element('div',{
					'title' : node[i].getAttribute('file'),
					'assetRequester' : __assetRequester,
					'assetBank' : __assetbankfolder,
					'class' : 'assetmenuitemholder'
				});
				linkholder.addEvent('mouseover', function(event){
					document.id('CMSassetBankFilePreviewHolder').style.display="inline";
					CMSshowMediaThumb(this,true);
					return false; 
				});
				var link = new Element('div',{
					'class' : 'assetlink', 
					'text' : node[i].getAttribute('file')
				});
				if (linkholder.get('assetRequester')!=null){
					link.addEvent('click', function(event){
						assignAsset(this.parentNode.title,this.parentNode.get('assetBank')+this.parentNode.title);
					});
					link.setStyle('cursor','pointer');
				}
				var delButton = new Element('img',{'title' : 'Remove Asset', 'target' : link.title, 'src' : 'images/cross.png', styles:{
					cursor:'pointer',
					float:'right',
					padding:'7px'
				}});
				delButton.addEvent('click', function(event){
					var assets = new Request({
						'url' : 'removeasset.php', 
						'method' : 'get', 
						onSuccess: function(responseText, responseXML) {
							getAssetBank();
						}
					}).send('file='+__assetbankfolder+this.parentNode.title);
				});
				if (linkholder.get('assetRequester')!=null){
					var selectButton = new Element('div',{
						'text' : 'Assign',
						'styles':{
							fontWeight:'bold',
							cursor:'pointer',
							color:'#FFF',
							background : 'url(images/tab_go.png)',
							backgroundPosition: '7px center',
							backgroundRepeat: 'no-repeat',
							padding:'7px 7px 7px 27px',
							float:'left'
						}
					});
					selectButton.addEvent('click', function(event){
						assignAsset(this.parentNode.title,this.parentNode.get('assetBank')+this.parentNode.title);					
					});
					selectButton.injectTop(linkholder);					
				}
				delButton.injectTop(linkholder);
				link.inject(linkholder);
				linkholder.inject(target);					
			}
			target.style.background="url('blank.gif')";
		}
	}).send('dompath='+__rootpath+'&path='+__assetbankfolder+'&types='+types);
}
function CMSshowMediaThumb(element,assetBankCall){
	//alert("CMSshowMediaThumb called by "+element.id+" has value of "+element.value);
	if (assetBankCall==true) {
		var holder='CMSassetBankFilePreviewHolder';
		var media=element.title;
		var previewlink=null;
	}
	else {
		var holder=element.id+'_assetPreview';

		var media=element.value;
		var previewlink=element.id+'_previewLink';
	}
	if (media!="") {
		var filetype=CMSgetFileExtension(media);
		holder=document.id(holder);
		holder.addClass('assigned');
		holder.removeClass('unassigned');
		var doShadowbox=false;
		if (previewlink!=null) {
			previewlink=document.id(previewlink);
			previewlink.href=__assetbankfolder+media;
			doShadowbox=true;
			previewlink.style.display='block';			
		}
		while (holder.hasChildNodes()) holder.removeChild(holder.lastChild);
		if (
				(filetype=="jpg")||
				(filetype=="jpeg")||
				(filetype=="png")||
				(filetype=="gif")
			){
			var preview = new Element('img',{'src' : 'services/imageServe/showimage.php?width=200&height=160&filename=../../'+__assetbankfolder+media});
			preview.inject(holder);
			if (doShadowbox) Shadowbox.setup(previewlink,{'player':'img'});
		}
		else if (
				(filetype=="swf")
			){
			var preview = new Element('div',{'id' : element.id+'_assetPreviewDisplayer'});
			preview.inject(holder);
			swfobject.embedSWF(__assetbankfolder+media, element.id+'_assetPreviewDisplayer', "200", "160", "9.0.0","expressInstall.swf");
			if (doShadowbox) Shadowbox.setup(previewlink,{'player':'swf'});
		}
		else if (
				(filetype=="flv")||
				(filetype=="mp3")
			){
			var preview = new Element('div',{'id' : element.id+'_assetPreviewDisplayer'});
			var flashvars = {};
			flashvars.autostart            = 'false';
			flashvars.width             = '200';
			flashvars.height            = '160';
			flashvars.file              = __assetbankfolder+media;
			flashvars.rotatetime        = '1';
			flashvars.repeat            = 'true';
			var params = {};
			params.allowscriptaccess    = 'always';
			var attributes = {};
			preview.inject(holder);
			swfobject.embedSWF('player.swf', element.id+'_assetPreviewDisplayer', '200', '160', '9.0.0', 'expressInstall.swf', flashvars, params, attributes);
			if (doShadowbox) Shadowbox.setup(previewlink,{'player':'flv'});
		}	
		else if (
				(filetype=="mov")
			){
			var preview = new Element('div',{'id' : element.id+'_assetPreviewDisplayer'});
			preview.inject(holder);
			var currentDate = new Date()
			var myQTObject = new QTObject(__assetbankfolder+media+"?forcereload="+currentDate.getTime(), "", "200", "160");
			myQTObject.addParam("autoplay", "false");
			myQTObject.write(element.id+'_assetPreviewDisplayer');
			if (doShadowbox) Shadowbox.setup(previewlink,{'player':'qt'});
		}	
		else if (
				(filetype=="zip")
			){
			var preview = new Element('img',{'src' : 'images/zip-icon.png'});
			preview.inject(holder);
		}
	}
}

function cancelAssignedAsset(assetCurrentValue) {
	if (__assetRequester!=null) {
		__assetRequester.value='';
		var __assetRequesterId=__assetRequester.id;
		var previewlink=document.id(__assetRequesterId+"_previewLink");
		previewlink.href='';
		previewlink.style.display='none';
		var blnkImage = document.createElement('IMG');
		blnkImage.src="images/blank.gif";
		blnkImage.style.width="160px";
		blnkImage.style.height="200px";
		var previewfileshow=document.id(__assetRequesterId+"_assetPreview");
		while (previewfileshow.hasChildNodes()) previewfileshow.removeChild(previewfileshow.lastChild);
		previewfileshow.removeClass('assigned');
		previewfileshow.addClass('unassigned');
		previewfileshow.appendChild(blnkImage);
		var allnodesinorig=previewfileshow.getElements('');
		for (var i=0; i<allnodesinorig.length;i++) {
			allnodesinorig[i].removeAttribute('id');
			allnodesinorig[i].style.zIndex="10";
			allnodesinorig[i].id="slaveimage";
			
		}
	}
	__assetRequester.value='';
	__assetRequesterType=null;
}
function assignAsset(asset,assetlink){
	if (__assetRequester!=null) {
		if (__assetRequesterType=="rte"){
			
		// rte request so insert image into caller
			
			var img=assetlink;
			__assetRequester.value=__assetRequester.value+'<img src="'+assetlink+'" align="left" />';
//			alert(__assetRequester.innerHTML);
		}
		else if (__assetRequesterType=="OLDrte"){
			
		// rte request so insert image into caller
			
			var img=assetlink;
			var newdiv = new Element('img',{'src' : img});

			newdiv.addEvent('mousemove',function(event){
				this.mousex=event.page.x;
				this.mousey=event.page.y;
			});

			newdiv.addEvent('click', function(){
				var assetManage = new Element('div',{ 
					styles: {
						position : 'absolute', 
						top : (this.mousey-17)+"px", 
						left : (this.mousex-57)+"px", 
						background : '#CCC', 
						zIndex : '400', 
						width : '114px', 
						height : '38px'
					}
				});

				assetManage.store('targetAsset',this);

				assetManage.addEvent('mouseleave', function() { this.destroy(); });


				var aLeft = new Element('img',{'src' : 'images/text_align_left.png', styles:{
					padding:'10px',
					background:'#fff',
					border:'solid #444 1px'
				}});
				aLeft.addEvent('click', function(){
					var tg=this.parentNode.retrieve('targetAsset');
					tg.setAttribute('align','left');
					tg.parentNode.previousSibling.value=tg.parentNode.innerHTML;
				});
				var aRight = new Element('img',{'src' : 'images/text_align_right.png', styles:{
					padding:'10px',
					background:'#fff',
					border:'solid #444 1px'
				}});
				aRight.addEvent('click', function(){
					var tg=this.parentNode.retrieve('targetAsset');
					tg.setAttribute('align','right');
					tg.parentNode.previousSibling.value=tg.parentNode.innerHTML;
				});
				var imgDelete = new Element('img',{'src' : 'images/image_delete.png', styles:{
					padding:'10px',
					background:'#fff',
					border:'solid #444 1px'
				}});
				imgDelete.addEvent('click', function(){
					var tg=this.parentNode.retrieve('targetAsset');
					var holder=tg.parentNode;
					tg.destroy();
					holder.previousSibling.value=holder.innerHTML;
					this.parentNode.destroy();
				});
				aLeft.inject(assetManage);
				aRight.inject(assetManage);
				imgDelete.inject(assetManage);

				assetManage.inject(document.id(document.body));
			});
			newdiv.inject(__assetRequester);
			__assetRequester.previousSibling.value=__assetRequester.innerHTML;
		}
		else {
			__assetRequester.value=asset;
			var __assetRequesterId=__assetRequester.id;
			var previewlink=document.id(__assetRequesterId+"_previewLink");
//			alert(assetlink);
			previewlink.href=assetlink;
			
			var filetype=CMSgetFileExtension(asset);


			if (
				(filetype=="jpg")||
				(filetype=="jpeg")||
				(filetype=="png")||
				(filetype=="gif")
			){
				Shadowbox.setup(previewlink,{'player':'img'});
			}
			else if (
					(filetype=="swf")
				){
				Shadowbox.setup(previewlink,{'player':'swf'});
			}
			else if (
					(filetype=="flv")||
					(filetype=="mp3")
				){
				if (doShadowbox) Shadowbox.setup(previewlink,{'player':'flv'});
			}	
			else if (
					(filetype=="mov")
				){
				if (doShadowbox) Shadowbox.setup(previewlink,{'player':'qt'});
			}	

			previewlink.style.display='block';
			var previewfileshow=document.id(__assetRequesterId+"_assetPreview");
			previewfileshow.addClass('assigned');
			previewfileshow.removeClass('unassigned');
			var previewtoattach=document.id('CMSassetBankFilePreviewHolder').firstChild;
			var doattach=previewtoattach.cloneNode(true);
			while (previewfileshow.hasChildNodes()) previewfileshow.removeChild(previewfileshow.lastChild);
			previewfileshow.appendChild(doattach);
			var allnodesinorig=previewfileshow.getElements('');
			for (var i=0; i<allnodesinorig.length;i++) {
				allnodesinorig[i].removeAttribute('id');
				allnodesinorig[i].style.zIndex="10";
				allnodesinorig[i].id="slaveimage";
			
			}

		}
	}
	hideAssetBank();
}
function getAbsolutePosition(element) {
	var r = { x: element.offsetLeft, y: element.offsetTop };
	if (element.offsetParent) {
		var tmp = getAbsolutePosition(element.offsetParent);
		r.x += tmp.x;
		r.y += tmp.y;
	}
	return r;
}
  
function getElementSize(element) {
	var myWidth = 0, myHeight = 0;
	myWidth = element.offsetWidth;
	myHeight = element.offsetHeight;
	var dimensions=new Array();
	dimensions[0]=myWidth;
	dimensions[1]=myHeight;
	return dimensions;
}


function renameItemsToArray0() {
}

function in_array(needle, haystack) {
    for (var i = 0; i < haystack.length; i++) {
        if (haystack[i] == needle) {
            return true;
        }
    }
    return false;

}

function ie6Png(){

}

function placeInterface(){
	var formControls=$$(".CMSformControl");
	var formLabels=$$(".CMSformLabel");
	var formComponentHolders=$$(".CMSformComponentHolder");
	var formLabelWidths=formLabels.getStyle('width');
	var formComponentHoldersXY=formComponentHolders.getPosition();
	var CMSmainHolderWidth=document.id("CMSmainHolder").getSize();
	CMSmainHolderWidth=CMSmainHolderWidth.x;
	var form_item_inc=0;
	formControls.each(function(el){
	    var new_width=CMSmainHolderWidth-(parseInt(formLabelWidths[form_item_inc])+formComponentHoldersXY[form_item_inc].x);
	// scrollbar workaround
	    var new_width=new_width-100;
	    el.setStyle('width', new_width+'px');
	    form_item_inc++;
	});
}

function placeSite() {
	ie6Png();


	var CMSloader=document.id("CMSloader");
	var CMSmainHolder=document.id("CMSmainHolder");
	var CMSlogo=document.id("CMSlogo");
	var CMSassetBank=document.id("CMSassetBank");
	var CMSassetBankFileWindow=document.id("CMSassetBankFileWindow");
	var CMSassetBankFileWindowMenu=document.id("CMSassetBankFileWindowMenuOptions");
	var CMSassetBankFileWindowContents=document.id("CMSassetBankFileWindowContents");
	var CMSassetBankFileDisplayWindow=document.id("CMSassetBankFileDisplayWindow");
	var CMScloseAssetBank=document.id("CMScloseAssetBank");
	var CMSsaveChanges=document.id("CMSsaveChanges");
	var windowDimensions=getWindowSize();
	var CMSsaveChanges=getElementSize(CMSsaveChanges);

// set CMSmainHolder height to window height and obtain these values in CMSmainHolderDims and CMSmainHolderPos

	var CMSloaderDims=getElementSize(CMSloader);
	CMSmainHolder.style.height=((windowDimensions[1]-(getAbsolutePosition(CMSmainHolder).y-CMSloaderDims[1]))-(CMSsaveChanges[1]+12))+"px";
	var CMSmainHolderDims=getElementSize(CMSmainHolder);

// set CMScloseAssetBank button ypos 

	var CMScloseAssetBankDims=getElementSize(CMScloseAssetBank);
	CMScloseAssetBank.style.top=(windowDimensions[1]-(CMScloseAssetBankDims[1]+12))+"px";



// placing CMSassetBank 

	CMSassetBank.style.top="0px";
	CMSassetBank.style.width="100%";
	CMSassetBank.style.height=(windowDimensions[1]-CMScloseAssetBankDims[1])+"px";
	var CMSassetBankDims=getElementSize(CMSassetBank);
	var CMSassetBankPos=getAbsolutePosition(CMSassetBank);
// placing CMSassetBankFileWindow

	CMSassetBankFileWindow.style.top=CMSassetBankPos.y+"px";
	CMSassetBankFileWindow.style.width="50%";
	CMSassetBankFileWindow.style.height=CMSassetBankDims[1];

// set asset file list window contents height by taking off menu height from CMSassetBankFileWindow height

	var CMSassetBankFileWindowMenuDims=getElementSize(CMSassetBankFileWindowMenu);

// wierd issue grabbing menu height - hard coding at 60px;

	CMSassetBankFileWindowMenuDims[1]="106";

// set CMSassetBankFileWindow height to CMSassetBankFileWindow - CMSassetBankFileWindow;

	var CMSassetBankFileWindowDims=getElementSize(CMSassetBankFileWindow);
	CMSassetBankFileWindowContents.style.height=(parseInt(CMSassetBank.style.height)-CMSassetBankFileWindowMenuDims[1])+"px";

// placing CMSassetBankFileDisplayWindow (asset file display window)

	CMSassetBankFileDisplayWindow.style.top=CMSassetBank.style.top;
	CMSassetBankFileDisplayWindow.style.left="50%";
	CMSassetBankFileDisplayWindow.style.width="50%";
	CMSassetBankFileDisplayWindow.style.height=CMSassetBank.style.height;

// Form for uploading files to the media bank
	
	var CMSuploadContainer=document.id("CMSuploadContainer");
	var CMSuploadForm=document.id("CMSuploadForm");
	var CMSuploadFormDims=getElementSize(CMSuploadForm);
	CMSuploadContainer.style.left=((windowDimensions[0]/2)-(CMSuploadFormDims[0]/2))+"px";
	CMSuploadContainer.style.top=((windowDimensions[1]/2)-(CMSuploadFormDims[1]/2))+"px";


	placeInterface();
	window.onresize=placeSite;
}


function getWindowSize() {
	var myWidth = 0, myHeight = 0;
		if( typeof( window.innerWidth ) == 'number' ) {
		//Non-IE
		myWidth = window.innerWidth;
		myHeight = window.innerHeight;
	} 
  	else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
		//IE 6+ in 'standards compliant mode'
		myWidth = document.documentElement.clientWidth;
		myHeight = document.documentElement.clientHeight;
	} 
  	else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
		//IE 4 compatible
		myWidth = document.body.clientWidth;
		myHeight = document.body.clientHeight;
	}
	dimensions=new Array();
	dimensions[0]=myWidth;
	dimensions[1]=myHeight;
	return dimensions;
}



function showDefaultView(){


// this is the first load view
// hide everything that is hidden by default
// show everything that should be showing
	document.id("CMSuploadContainer").style.display="none";
	document.id('CMSassetBankFileWindow').style.display='none'; 
	document.id('CMSassetBankFileDisplayWindow').style.display='none'; 
	document.id('CMScloseAssetBank').style.display='none'; 
	document.id("CMSassetBank").style.display="none";
	document.id("CMSholder").style.visibility="visible";
	document.id("CMSloader").style.display="none";
	
// then focus CMSmainHolder so it scrolls on key up down
	document.id("CMSmainHolder").focus(); 

}
function showMediaUpload() {
	document.id("CMSuploadContainer").style.display="block";
}
function uploadSelectedFiles() {
	alert("called");
	var iframe=document.id("CMSuploadForm");
	iframe.className="CMSuploadFormUploading";
	window.frames['CMSuploadForm'].document.forms['iform'].submit();
}
function uploadSelectedFile() {
	var iframe=document.id("CMSuploadForm");
	iframe.className="CMSuploadFormUploading";
	window.frames['CMSuploadForm'].document.forms['iform'].submit();
}
function showUploadFormFix(folder){
	document.id("CMSuploadForm").className="CMSuploadForm";
	var iframe=document.id("CMSuploadForm");
	iframe.src="fancyUpload/index.php";
}

function doYUItexteditor(textarea){

}
function CMSinsertImageIntoTextarea(caller){
	var tg=caller.id.replace('_insertImage','');
	var textarea=document.id(tg);	
	__assetRequesterType="rte";
	__assetRequester=textarea;
	showAssetBank();
}
function CMStextareaRTE(textarea){
	var rte=textarea.nextSibling
	//rte.setStyle('height',textarea.getStyle('height'));
//	alert(textarea.value);
	rte.setStyle('width',textarea.getStyle('width'));
	rte.innerHTML=textarea.value;
}
function CMSgetFileExtension(filename){
	return (/[.]/.exec(filename)) ? /[^.]+$/.exec(filename) : undefined;
}

function urldecode (str) {
    // Decodes URL-encoded string  
    // 
    // version: 911.718
    // discuss at: http://phpjs.org/functions/urldecode
    return decodeURIComponent(str).replace(/\+/g, '%20');
}

function createMenus() {
}


var MenuAutoScroll = new Class({
	Implements: [Log],
	initialize: function(tab,menu){
		this.enableLog();
		this.tab=document.id(tab);
		this.menuHolder=document.id(menu);
		this.menuContents=this.menuHolder.getElement('.CMSmenuScrollable');
        this.menuContents.setStyles({
        	'position':'relative',
        	'left':'0',
        	'top':'0',
        });
		this.containerDims=document.id("CMSmainHolder").getSize();

		this.menuCoords=this.menuContents.getPosition();
		this.menuDims=this.menuContents.getSize();

		if (this.menuDims.y>this.containerDims.y){
			this.menuHolder.setStyles({
				'height' : this.containerDims.y,
				'borderBottom' : 0,
				'overflow' : 'hidden'
			});
			this.menuHolderDims=this.menuHolder.getSize();
			this.menuHolderCoords=this.menuHolder.getPosition();
	
			this.menuContents.addEvent('mousemove',function(event){this.calculatePosition(event)}.bind(this));
			this.menuContents.addEvent('mouseleave',this.destroy.bind(this));
	
			this.xratio=(this.menuHolderDims.x/this.menuDims.x);
			this.yratio=(this.menuHolderDims.y/this.menuDims.y);
	
			this.xcenter=this.menuHolderDims.x;
			this.ycenter=this.menuHolderDims.y;
		}
	},
	calculatePosition: function(event){
    	var mouseY = event.page.y-this.menuHolderCoords.y;
    	var mouseX = event.page.x-this.menuHolderCoords.x;
    	var maskee=this.menuContents;
		var targetx=0;
		var targety=0;
		var xignore=0;
		var yignore=0;
		var xoffset=0;
		var yoffset=0;
		var xrange=((this.menuDims.x-xignore)-this.menuHolderDims.x);
		var yrange=((this.menuDims.y-yignore)-this.menuHolderDims.y);
		if (this.menuDims.x>this.menuHolderDims.x) targetx=(xoffset-((xrange/100)*((100/this.menuHolderDims.x)*mouseX)));
		if (this.menuDims.y>this.menuHolderDims.y) targety=(yoffset-((yrange/100)*((100/this.menuHolderDims.y)*mouseY)));
        this.menuContents.setStyle('top', targety+'px');
        this.menuContents.setStyle('left', targetx+'px');
		this.log(targetx);
	},
	destroy: function(){
		this.menuContents.removeEvent('mouseleave');
	}
});



var stemComponent_ckeditor = new Class({
	Implements: [Log],
	initialize: function(el,shuffleMode){
		this.el=document.id(el);
		this.enableLog();
		this.log('element is '+el.get('id'));		
		if (shuffleMode!=0){
			this.log('destroying ck for '+this.el.get('id'));		
			var thisck=CKEDITOR.instances[this.el.get('id')];
			thisck.destroy();  
		}
		else {
			this.create();
		}
	},
	create: function(){
		this.log('create ck for '+this.el.get('id'));	
		var thisck=CKEDITOR.instances[this.el.get('id')]; 
		if(!thisck){
			CKEDITOR.replace(this.el.get('id'),{});
		} 
	}	
});

var stemComponent_ckeditor_simple = new Class({
	Implements: [Log],
	initialize: function(el,shuffleMode){
		this.el=document.id(el);
		this.enableLog();
		this.log('element is '+el.get('id'));		
		if (shuffleMode!=0){
			this.log('destroying ck for '+this.el.get('id'));		
			var thisck=CKEDITOR.instances[this.el.get('id')];
			thisck.destroy();  
		}
		else {
			this.create();
		}
	},
	create: function(){
		this.log('create ck for '+this.el.get('id'));	
		var thisck=CKEDITOR.instances[this.el.get('id')]; 
		if(!thisck){
			CKEDITOR.replace(this.el.get('id'),{toolbar : 'Basic'});
		} 
	}	
});


/*
var stemComponent_tinymce = new Class({
	Implements: [Log],
	initialize: function(el,shuffleMode){
		this.el=document.id(el);
		this.enableLog();
		this.log('element is '+el.get('id'));		
		if (shuffleMode!='0'){
			this.log('destroying tiny for '+this.el.get('id'));		
			tinyMCE.execCommand('mceRemoveControl', false, this.el.get('id')); 
		}
		else {
			this.create();
		}
	},
	create: function(){
		this.log('create tiny for '+this.el.get('id'));	
		tinyMCE.execCommand('mceAddControl', false, this.el.get('id')); 
	}	
});
*/

var stemComponent_j_query_ui_datepicker = new Class({
	Implements: [Log],
	initialize: function(el,shuffleMode){
		this.mootools_el=document.id(el);
		this.el=el;
		this.enableLog();
		this.log('element is '+this.el.get('id'));		
		if (shuffleMode!=0){
			this.log('destroying jquery_ui_datepicker for '+this.el.get('id'));		
		    $(this.el).datepicker('destroy');
		}
		else this.create();
	},
	create: function(){
		this.log('create jquery_ui_datepicker for '+this.el.get('id'));	
	    var picker=$(this.el).datepicker({ dateFormat: 'yymmdd' ,altFormat: 'yymmdd'});
	    this.mootools_el.store('datepicker',picker);
	}	
});

