
if(window['Ajax'] && Ajax.InPlaceEditor)
{
var MapleInplaceEditor = Class.create(Ajax.InPlaceEditor,
	{
	initialize: function($super,element, url, options) {
    	this.element = element = $(element);
 	 	var bc = this.element.style.backgroundColor;
		$super(element, url, options);
		this._originalBackground = bc;
	},
	handleFormSubmission:function($super,e)
	{
		if(this.url.indexOf("javascript") == 0)
		{
			try
			{
				eval(this.url);
				this._boundWrapperHandler();
			}
			catch(e)
			{
				alert(e);
			}
		}
		else
		{
			$super(e);
		}
	},
	 leaveEditMode: function($super) {
	 var bc = this.element.style.backgroundColor;
	 this._originalBackground = bc;
	 $super();
	 this.element.style.backgroundColor = bc;
		}
	}

	);
}
	

var NavigationClass = Class.create(FunctionInvoker,
	{
		initialize : function($super)
		{
		$super();
		this.modifiedflag = false;
		this.selectedItem = null;
		this.loaded = new Object();
		},
		setURLPath:function(path)
		{
			if(!path)
				path = "/adm/content/";
				
			this.urlPath = path;
		},
		getSelected: function()
			{
				return this.selectedItem;
			},
		clearSelected: function()
			{
				this.selectedItem =null;
				this.updateMenu();
			},
		setSelected : function(param)
		{
			this.selectedItem = param;
			if(param)
			{
				var ele = param.element;
					var p = ele.parentNode;
					while(p.nodeName != "TR")
						p = p.parentNode;
					var rowList = $(p.parentNode).childElements();
					for(var i=0;i<rowList.length;i++)
					{
						if(rowList[i].identify() != p.identify())
							rowList[i].removeClassName("selected");
					}
					$(p).addClassName("selected");
			}
			
			this.updateMenu();
		},
		doEdit : function()
		{
			Maple.setHaze($('main'));
			document.location = Navigation.getSelected().editURL;
		},
		doView : function()
		{
			Maple.setHaze($('main'));
			document.location = Navigation.getSelected().viewURL;
		},
		doNewRuleHandler:  function()
		{
				var pObj = Object.extend(new Object(),this.menuInfo);
				if($('navTree'))
				{
					var selectedTree = $('navTree').select(".selected").find(function(e){return e.hasClassName("owner");});
					if(selectedTree)
					{
						pObj.ownerName =  selectedTree.id;
					}
				}
			var pstr = Object.toQueryString(pObj);
			new DynamicDivWindow(
				{modal:'true',type:'url',positionType:'center',
				width:'auto',height:'auto',params:pstr,
				url:'/adm/content/newComponent.htm',method:'get'}
			);
		},
		setAnchor:function (label,itemId)
		{
			var eleA = $("alpha_"+itemId);
			if(eleA)
			{
				var h3 = new Element("h3");
				h3.addClassName('alphaheading');
				h3.update(label);
				eleA.insert(h3);
				
			}

		},
		doFormSave: function(formEle)
		{
			this.debug("Saving Form: " + formEle.id);
			// get bound variable names
				var propObj = new Object();
	
				var props = $(formEle).select("input","select","textarea");
				
				var val = null;
				for(var i =0;i<props.length;i++)
				{
					var loc = props[i].name.split(".");
							if(props[i].type == "checkbox")
							{
								if(props[i].checked)
									val = props[i].value;
								else
									val = !(props[i].value);
									
							}
							else
							{
								val = props[i].value;
							}
					if(loc.length > 1)
					{
								if(propObj[loc[0]])
						{
							var obj = propObj[loc[0]];
							for(var loci=1;loci<loc.length-1;loci++)
							{
								if(!obj[loc[loci]])
									obj[loc[loci]] = new Object();
								obj =obj[loc[loci]];
							}

							
							if(props[i].hasClassName("array"))
							{
								if(! obj[loc[loc.length-1]] || ! Object.isArray(obj[loc[loc.length-1]]))
								{
									this.debug("setting array for " + loc[loc.length-1] + " was " + obj[loc[loc.length-1]]); 
									obj[loc[loc.length-1]]  = new Array();
								} 
								obj[loc[loc.length-1]].push(val);
							}
							else
							{
								obj[loc[loc.length-1]] = val;
							}
						}
					}
					else
					{
						if(props[i].hasClassName("array"))
						{
							if(!propObj[loc[0]])
							{
								propObj[loc[0]] = new Array();
							}
							propObj[loc[0]].push(val);
						}
						else
						{
							propObj[loc[0]] = val;
						}
					}
				}

				
			this.debug("props: ", Object.toJSON(propObj));
			if(formEle.action)
				this.setURL(formEle.action);
			else
				this.setURL(this.urlPath+"fcnInvoke.htm");
			var fcnData = new Object();
			if(propObj['functionName'])
				fcnData['functionName'] = propObj['functionName'];
			else
				fcnData['functionName'] = formEle.id;
			Object.extend(fcnData,propObj);
			var callback  = this.onObjectUpdateHandlerEditor.bind(this);
			this.callFunction(fcnData,callback);
			var par = $(formEle.parentNode);
			
			while(par.nodeName != 'BODY' && ! $(par).hasClassName("DynamicDivEx"))
			{
				par = $(par.parentNode);
			}
			if(par.nodeName == 'DIV')
			{
				par.closeDiv();
			}
		},
		doFormCancel: function(formEle)
		{
			var par = $(formEle.parentNode);
			while(par.nodeName != 'BODY' && ! $(par).hasClassName("DynamicDivEx"))
			{
				par = $(par.parentNode);
			}
			if(par.nodeName == 'DIV')
				par.closeDiv();

		},
		invokeObjectUpdate : function(url,fcnData)
		{
			if(url && url.length > 0)
			{
				this.setURL(url);
			}
			else
			{
				this.setURL(this.urlPath+"fcnInvoke.htm");
			}
			var callback  = this.onObjectUpdateHandlerEditor.bind(this);
			this.callFunction(fcnData,callback);
		},
		error: function(msg)
		{
			if(window.console)
				window.console.error(msg);
		},
		debug: function(msg)
		{
			if(window.console && window.console.debug)
				window.console.debug(msg);
		},
		onObjectUpdateHandlerEditor: function(updatedObjMap)
		{
			var errCode = 0;
			var errorData;
			var objList = $H(updatedObjMap).values();
			if(updatedObjMap['errorData'])
			{
				var errorData = updatedObjMap['errorData'];
				errCode = ( errorData['errorCode']) * 1;
			}
			if(errCode > 0)
			{
				this.onErrorHandler(errorData);
			}
			else
			{
				if(this.onObjectUpdated || this.onAllObjectsUpdated)
				{
					
					if(this.onAllObjectsUpdated)
					{
						this.onAllObjectsUpdated(objList);
					}
					else
					{
						var errorData = updatedObjMap['errorData'];
						var invocationId = updatedObjMap['invocationId'];
						this.onObjectUpdated(invocationId,updatedObjMap,errorData);
					}
				}
				for(var i=0;i<objList.length;i++)
				{
					this.bindUpdatedObjects(objList[i]);
				}
			}
			
		},
		onObjectUpdated: function(invocationId,updatedObjMap,errorData)
	{
		var errorMessage = updatedObjMap['errorMessage'];
	
		//display error messages to user if there is one
		if(errorMessage != null)
		{
			alert(updatedObjMap['errorMessage']);
			Maple.clearHaze($('main'));
		}
		else if(updatedObjMap['owner'])
		{
			var newOwner = updatedObjMap['owner'];
			newOwner.name = newOwner['NAME'];
			var ownerList = $('ownerList');
			if(ownerList)
			{
				var beforeEle = ownerList.childElements().find(function(ownerEle)
				 {
					var sa= ["zzzz",ownerEle.id.toLowerCase(),newOwner.name.toLowerCase()];
					sa.sort();
					var ret = sa[0] != ownerEle.id.toLowerCase();
	  				return ret;
	  			});
	  			var newEle = new Element("LI",{onclick:"Navigation.doNavList({targ:this,filter:'ownerName."+newOwner.name+"'})",
	  							id:newOwner.name});
	  			newEle.update(newOwner.name);
	  			newEle.addClassName("clickable");
	  			newEle.addClassName("owner");
	  			
	   			if(!beforeEle)
	  			{
	 	 				ownerList.insert(newEle);
	  			}
	  			else
	  			{
	   				beforeEle.insert({before:newEle});
	  			}
	  			updateTreeClasses();
	  			Navigation.doNavList({
	  							targ:newEle,
	  							filter:"ownerName."+newOwner.name
	  							});
			}
		}
		else if (updatedObjMap['deletedOwner'])
		{
			var dOwner = updatedObjMap['deletedOwner'];
			dOwner.name = dOwner['NAME'];
			var ownerList = $('ownerList');
			if(ownerList)
			{
				var delEle = ownerList.childElements().find(function(ownerEle)
				 {
	  				return (ownerEle.id == dOwner.name);
	  			});
	  			if(delEle)
	  			{
	  				delEle.remove();
	  			}
			}
			
		}
		else if(updatedObjMap['topRule'])
		{
			if(updatedObjMap['topRule']['contentEditorURL'])
				document.location = updatedObjMap['topRule']['contentEditorURL'];
			else
				document.location = document.location; 
		}
		else if(updatedObjMap['delRule'])
		{
			var rowName = updatedObjMap['delRuleId'];
			var tr = $("fullName-" + rowName).up("TR");
			if(tr)
			{
				tr.remove();
				Navigation.clearSelected();
			}
		}
	},
		doResources: function()
		{
			Maple.setHaze('main');
			document.location = '/adm/content/resources.htm';
		},
		showNews :function()
		{
			urlParams = "";
			new DynamicDivWindow({modal:'true',
			style:'block',
			width:'700px',height:'700px',positionType:'center',
			params:urlParams,url:'/adm/content/newsItems.htm',method:'get'});
		},
	   	doNavList: function(pObj)
		{
			if(pObj.targ)
			{
				if(! pObj.targ.hasClassName("selected"))
				{
				var navele = pObj.targ.parentNode;
				while(navele.nodeName != "DIV")
					navele = navele.parentNode;
					
				ulist = $(navele).select("li");
				for(var i=0;i<ulist.length;i++)
				{
					ulist[i].removeClassName("selected");
					if(ulist[i].inplaceEditor)
					{
						ulist[i].inplaceEditor.destroy();
						ulist[i].inplaceEditor = null;
					}
					
				}

				$(pObj.targ).addClassName("selected");
				
				}	
				else
				{
					if(pObj.targ.hasClassName("renamable"))
					{
						this.startInplaceEditor(pObj.targ);
						return;
					}
				}		
			}
	
			var po = new Object();
			for(var p in pObj)
			{
				if(p != 'targ')
					po[p] = pObj[p];
			}

			var params = new Object();
			Navigation.curFilterVal = pObj.filter;
			
			params["navListParams"] = Object.toJSON(po);
				var qparams = Object.toQueryString(params);
			Maple.setHaze($("main"));
					
			new SimpleRequest('navList',this.urlPath+'navListResults.htm','post',qparams,this.navListLoaded.bind(this));
			
			//clear out selected
			this.setSelected(null);
	},
	
	navListLoaded: function(parms)
	{
		if(this.onNavListLoaded)
			this.onNavListLoaded(parms);
		Maple.clearHaze($("main"));
	},
	bindUpdatedObjects: function(obj)
			{
				var className = obj['className'];
				var objId =  obj['id'];
				if(obj.JSON_KMSOBJECT_MARKER)
				{
				this.debug("KMSobj: " + Object.toJSON(obj));
					if(! objId)
						objId = obj.getField("id");
					if(! className)
						className = obj.getField("className");
				}
				if(className && objId)
				{
					var objKey = className + "." + objId;
				this.debug("objKey = " + objKey);
					var mlist = $$('.mapleObject');
					for(var i=0;i<mlist.length;i++)
					{
						this.debug("mlist[i].nodeName = " + mlist[i].nodeName + " mlist[i].id = " + mlist[i].id + " objKey = " + objKey);
						if(mlist[i].id && mlist[i].id.indexOf(objKey) == 0)
						{
							var parts = mlist[i].id.split(".");
							val = obj[parts[2]];
							if(!val && obj.JSON_KMSOBJECT_MARKER)
								val = obj.getField(parts[2]);
							if(mlist[i].nodeName == "INPUT")
							{
								$(mlist[i]).value = val;
							}
							else
							{
								$(mlist[i]).update(val);
							}
						} 
					}
				}
			},
			startInplaceEditor : function(ele)
			{
				ele = $(ele);
					if(!ele.inplaceEditor)
					{
						ele.inplaceEditor = new MapleInplaceEditor(ele, "javascript:doneEditing(this)", {
								ajaxOptions: {method: 'get',onException:Navigation.onException},
								okControl: false,
								cancelControl:false,
								htmlResponse:false,
								onComplete: function() {},
								onLeaveHover:function(){},
								onEnterHover:function(){},
								onLeaveEditMode: function(f,v) { ele.title=null;ele.parentNode.stopObserving('keypress',f.checkForEscapeOrReturn.bind(f))},
								onEnterEditMode : function(f,v) { ele.parentNode.observe('keypress',f.checkForEscapeOrReturn.bind(f))}
								});
					}
					ele.inplaceEditor.enterEditMode();

					if(ele.editClickTimeoutId)
						clearTimeout(ele.editClickTimeoutId);	
					ele.editClickTimeoutId = null;			
			},
			updateMenu : function()
			{
				if(this.onUpdateMenu)
					this.onUpdateMenu();
			},
			getModifiedFlag : function()
			{
				return this.modifiedflag;
			},
			setModifiedFlag : function(flag)
			{
				this.modifiedflag = flag;
			},
			doLoad:function(jsFile, callbackfcn)
			{
				if(!this.loaded[jsFile])
				{
					 $A(document.getElementsByTagName("script")).findAll( function(s) {
					      return (s.src && s.src.match(/editor\.js(\?.*)?$/))
					    }).each( function(s) {
					      var path = s.src.replace(/editor\.js(\?.*)?$/,'');
					      var datapath = path + jsFile;
							new Ajax.Request(datapath, { method: 'get',force:true, onSuccess:function(t) {
								if(callbackfcn) { callbackfcn()}
								}
							});	
			
					    });
				}
			},
			rosterChangesPending: function()
			{
				var container = $('maple-title').up(".DynamicScroller");
				if(container)
				{
					Maple.setHaze(container);
				}
			},
			rosterChanges: function(event)
			{
				var container = $('maple-title').up(".DynamicScroller");
				if(container && this.currentRosterSessionId)
				{
					Maple.setHaze(container);
					new SimpleRequest(container,'/adm/developer/eTutor/roster.htm','post','sessId='+this.currentRosterSessionId,function(){Maple.clearHaze(container)});
				}
			},
			
		eTutor : new (Class.create(FunctionInvoker,{
			callDeleteSess:function(sessId)
			{
				var evt = window.event;
				if(!evt && sessId && sessId.type)
					evt = sessId; 
				else
					evt = null;
						
				if( !sessId || sessId.type)
					sessId = $("sessionList").selectedSession;
				if(sessId)
				{
					if(confirm("Remove selected session?"))
						Navigation.eTutor.doDeleteSess(sessId);
				}
				else
				{
					alert("A session must be selected first");
				}
				if(evt)
					evt.stop();
			},
			changeEnrollment : function(eId, rId)
			{
				$('rosterTop').curEnrollmentId = eId;
			  	$('rosterTop').regDlg =  	new DynamicDivWindow(
				{title:'Update Registration',type:'url',positionType:'center',
					width:'50%',height:'auto',params:'e='+eId+'&r='+rId,
					url:'/adm/administration/workshops/register.jsp',method:'post'}
				);
			   	
			},
			callDoRoster: function(sessId)
			{
				var evt = window.event;
				if(!evt && sessId && sessId.type)
					evt = sessId; 
						
				if( !sessId || sessId.type)
					sessId = $("sessionList").selectedSession;
				if(sessId)
				{
					Navigation.eTutor.doRoster(sessId);
				}
				else
				{
					alert("A session must be selected first");
				}
				if(evt)
					Event.stop(evt);
			},
			previewLetter : function(options)
			{
				var params = {};
				if(options)
				{
					if(options.templateName)
					{
						params.templateName = options.templateName;
					}
					else if(options.templateId)
					{
						params.templateId = options.templateId;
					}
					if(options.ruleId)
					{
						params.ruleId = options.ruleId;
					}
					if(options.sessionId)
					{
						params.sessionId = options.sessionId;
					}
				}
				if((params.templateName && params.templateName != '0') || params.templateId > 0)
				{
					var pstr = Object.toQueryString(params);
					new DynamicDivWindow(
					{modal:'true',type:'url',positionType:'center',
					title:'Preview Confirmation Email',
					width:'50%',height:'auto',params:pstr,
					url:'/adm/config/templates/previewTemplate.htm',method:'get'});
				}
				else
				{
					alert("Select a template file to preview.");
				}
			},
			doSchedule: function(options)
			{
				var pstr, params = {};
				
				params.activityId = options.activityId;
				params.ruleId = options.ruleId;
				params.sessId = options.sessId;
				params.isNew = options.isNew;
				params.confLetter = options.confLetter;
				
				pstr = Object.toQueryString(params);	
				new DynamicDivWindow(
					{modal:'true',type:'url',positionType:'center',
					width:'auto',height:'auto',params:pstr,
					url:'/adm/developer/eTutor/doSchedule.htm',method:'get'});
					
			},
			doDeleteSess:function(sessId)
			{
				new DynamicDivWindow(
					{modal:'true',type:'url',positionType:'center',
					width:'auto',height:'auto',params: 'sessId='+sessId,
					url:'/adm/developer/eTutor/doDeleteSess.htm',method:'post'});
	
			},
			doRoster : function(sessId)
			{
				new DynamicDivWindow(
					{modal:'true',type:'url',positionType:'center',
					width:'50%',height:'500px',params: 'sessId='+sessId,
					url:'/adm/developer/eTutor/roster.htm',method:'post'});
			},
			/**
			*	gets the session defaults
			*/
			getRuleInfo :function(rId,sessForm, activityId)
			{
			this.setURL("/adm/developer/eTutor/fcnInvoke.htm");
			var fcnData = {
					functionName : 'ruleInfo',
					ruleId : rId,
					activityId : activityId
					};
			Maple.setHaze(sessForm);
			var callback  = this.onGetRuleInfo.bind(sessForm);
			this.callFunction(fcnData,callback);
			
			},
			onGetRuleInfo : function(updatedObjMap)
			{
				Maple.clearHaze(this);
				var errCode = 0;
				var errorData;
				if(updatedObjMap['errorData'])
				{
					var errorData = updatedObjMap['errorData'];
					errCode = ( errorData['errorCode']) * 1;
				}
				if(errCode > 0)
				{
					NavigationClass.getInstance().onErrorHandler(errorData);
				}
				else
				{
					if(updatedObjMap.maxAttendees)
					{
						this.maxAttendees.value = updatedObjMap.maxAttendees;
					}
					if(updatedObjMap.instructorId) 
					{
						this.instructorId.value = updatedObjMap.instructorId;
					}
					if(updatedObjMap.confLetter) 
					{
						this.confLetter.value = updatedObjMap.confLetter;
					}
					
				}
			}
		})),
		Hosting : new (Class.create(FunctionInvoker,
				{
					doHosting: function()
					{
						Maple.setHaze('main');
						document.location = "/adm/developer/eTutor/hosting.htm";
					},
					startSessionHost: function(anchor, sessId,ruleId)
					{
						var params = {};
						if(sessId && sessId > 0)
						{
							params.sessId = sessId;
						}
						if (ruleId && ruleId > 0)
						{
							params.ruleId = ruleId;
						}
		
						$(anchor).href = "/adm/developer/eTutor/startHosting.htm?" + Object.toQueryString(params);
						setTimeout(this.refreshRunningSessions.bind(this),500);
						return true;
					},
					refreshRunningSessions: function()
					{
						Maple.setHaze($('activeSessionContainer'));
						new SimpleRequest($('activeSessionContainer'),'/adm/developer/eTutor/hostingStatus.htm','post','');
					},
					doCalendar: function()
					{
						Maple.setHaze('main');
						document.location = "/adm/developer/eTutor/schedule.htm";
					},
					doForceOpen: function(sessId)
					{
						new SimpleRequest('msg-'+sessId,'/adm/developer/eTutor/forceReady.htm','get',"sessId="+sessId);
					},
					doAdhocList : function(ele,po)
					{
						var params = {};
						params.navListParams = Object.toJSON(po);
						var qparams = Object.toQueryString(params);
						Maple.setHaze($("main"));
						new SimpleRequest(ele,'/adm/developer/eTutor/adHocListResults.htm','post',qparams,this.sessListLoaded.bind(this));
			
					},
					sessListLoaded: function()
					{
						Maple.clearHaze($("main"));
					}
					
			})) // end Hosting
	
	}
	);
	NavigationClass.getInstance = function()
	 { if(! this.theInstance)
	 		this.theInstance = new NavigationClass();
	 	return this.theInstance;
	 	// this is a change;
	 }
	 NavigationClass.addMethods({getInstance : function() { return NavigationClass.getInstance(); }});
	
	
	
cb3StateClick = function(divEle,props)
{
	if(props)
	{
		for(var p in props)
			$(divEle)[p] = props[p];
	}		
	if(! $(divEle)['clickState'] ||$(divEle)['clickState'] == 1 )
	{
		$(divEle).removeClassName("noneChecked");
		$(divEle).removeClassName("someChecked");
		$(divEle).addClassName("allChecked");
		$(divEle)['clickState'] = 2;
	}
	else
	{
		$(divEle).addClassName("noneChecked");
		$(divEle).removeClassName("someChecked");
		$(divEle).removeClassName("allChecked");
		$(divEle)['clickState'] = 0;
	}
}





			
