/* Scriptaculous stuff */

//sections = ['group1','group2','group3'];
sections = ['group1content','group2content','group3content'];
var loaded = false;
var startTime=new Date().getTime();
var arrSelectedUsers=new Array();


//Delete all users' css in the apps folder when there are changes in the template css
function DeleteUsersCSS()
{
	var url="/ajaxFunctions.asp";
	var pars="type=deleteusercss";

	new Ajax.Request(url, {method: 'get',parameters:pars});
}

function do_select(obj)
{
//		alert($(obj).getValue());
	window.location.href=$(obj).getValue();
}


// Used by scriptaculous to specify sortable items within page.
function set_sortable(){
	//Specify sortable sub-groups.
//	if(exists('region1Right')){Sortable.create('region1Right',{tag:'div',only:'row'})};
//	if(exists('region2Right')){Sortable.create('region2Right',{tag:'div',only:'row'})};
//	if(exists('region3Body')){Sortable.create('region3Body',{tag:'div',only:'row'})};
//	if(exists('region2Body')){Sortable.create('region2Body',{tag:'div',only:'rowProfile'})};
	//Specify sortable page sections.
	if(exists('mainCol'))
	{
		Sortable.create('mainCol',{tag:'div',only:'region',handle:'headRow',
			onUpdate:function() { 
						var opt = {
									// Use POST
									method: 'post',
									// Send this lovely data
									postBody: 'mode=drag&'+Sortable.serialize('mainCol')
								}
						new Ajax.Request('ajaxSaveLayout.asp', opt);
			}})
	};

	if(exists('rightCol'))
	{
		Sortable.create('rightCol',{tag:'div',only:'region',handle:'headRow',
			onUpdate:function() { 
						var opt = {
									// Use POST
									method: 'post',
									// Send this lovely data
									postBody: 'mode=drag&'+Sortable.serialize('rightCol')
								}
						new Ajax.Request('ajaxSaveLayout.asp', opt);
			}})
	};
}

function exists(objId){
	var objExists = (document.getElementById(objId)) ? true : false ;
	return objExists;
}

function classExists(classId){
	var classExists = (document.getElementsByClassName(classId)) ? true : false ;
	return classExists;
}

/* General functions */

//Toggle content areas on/off
function contenttoggle(obj){

Effect.toggle(obj,'blind',{afterFinish:function()
	{ 
		var extElement=$(obj).up('.region');
		//alert(extElement.id);
		var opt = {
					// Use POST
					method: 'post',
					// Send this lovely data
					postBody: 'mode=toggle&obj='+extElement.id+'&flag='+$(obj).visible()
				  }
		new Ajax.Request('ajaxSaveLayout.asp', opt);
	}});
}

//Update toggle button text
function toggletext(obj,rfeobj){
	(document.getElementById(refobj).visible()) ? obj.innerHTML='CLOSE' : obj.innerHTML='OPEN';
}

//Update toggle button class
function toggleArrow(obj,refobj){
	if (exists(refobj)){
		if ($(refobj).visible()){
			setArrowRight($(obj));
		} else {
			setArrowDown($(obj));
		}
	}
}
function setArrowRight(arrowObj){
	arrowObj.src='/web_common/theme'+gTheme+'/images/arrow_right_col'+gColor+'.png';
	arrowObj.alt='Open';
	arrowObj.title='Open';
}
function setArrowDown(arrowObj){
	arrowObj.src='/web_common/theme'+gTheme+'/images/arrow_down_col'+gColor+'.png';
	arrowObj.alt='Close';
	arrowObj.title='Close';
}

//Toggle form 'more options' areas on/off
function moretoggle(obj){
	//$(obj).style.visibility = "visible";
	//NP 19/10/2007 - Fix issue with radio buttons not hiding in IE7
	if (navigator.userAgent.indexOf("MSIE 7") > -1){
		Effect.toggle(obj,'slide');
	} else {
		Effect.toggle(obj,'blind');
	}
	//Effect.toggle(obj,'blind',{afterFinish:function(){
		/*var extElement=$(obj).up('.region');
		//alert(extElement.id);
		var opt = {
					// Use POST
					method: 'post',
					// Send this lovely data
					postBody: 'mode=toggle&obj='+extElement.id+'&flag='+$(obj).visible()
				  }
		new Ajax.Request('ajaxSaveLayout.asp', opt);*/
	//}});
}

//Close web 2 content frames
function closeMe(obj){
	var extElement=$(obj).up('.region');
	//favourites: SwitchOff or Fade or BlindUp or Shrink
	Effect.Fade(extElement,{afterFinish:function()
		{ 
			Element.remove(extElement);
			var opt = {
						// Use POST
						method: 'post',
						// send close window flag to database
						postBody: 'mode=close&obj='+extElement.id
					  }
			new Ajax.Request('ajaxSaveLayout.asp', opt);
		}});

}

//Position calendar event <div>s based on event time
function position_events(){
	//Allow for different functions depending on page view.
	switch(getQueryVariable('view')){
		case "day" :
			/*-------------------
				DAY EVENTS
			-------------------*/

			//alert(navigator.appVersion);
			//Reposition left/top positions for all-day and timed events
			if(navigator.appVersion.indexOf('MSIE')>0){ //Reposition for IE
				if(navigator.appVersion.indexOf('MSIE 7')>0){ //Reposition for IE7
					var XOffset = 3;
				} else { //Other IEs
					var XOffset = 53;
				}
				var YOffset = 3;
			} else { //Reposition for other browsers
				var XOffset = 4;
				var YOffset = 4;
			}

			/*
			** DRAW ALL-DAY EVENTS **
			arr_eventADIds is a 2-dimensional array of All-day calendar eventIds
			created by script in page, at top of page 'Custom content' section.
			*/

			// Set event sizes manually for now
			timeSlotHeight = 12;			
			timeSlotWidth = 134;
			if ((arr_eventIds.length) > 5)
			{
				timeSlotWidth = (672/arr_eventIds.length);
			}


			// Loop through each event in array attaching it to the corresponding timeslot element
			for (i=0; i<arr_eventADIds.length; i++){

				//Set temp vars for current event
				var tempId = arr_eventADIds[i][0];
				var tempTime = arr_eventADIds[i][1];
				var tempFinish = arr_eventADIds[i][2];
				var tempName = arr_eventADIds[i][3];
				var tempToolTipText = arr_eventADIds[i][7];
				var tempUrl = arr_eventADIds[i][4];
				var tempTxtCol = arr_eventADIds[i][5];
				var tempBgCol = arr_eventADIds[i][6];
				var tempIconID = arr_eventADIds[i][8];
				var tempH = tempTime.substr(tempTime.length-5, 2);
				var tempM = tempTime.substr(tempTime.length-2, 2);


				var tempEndH = tempFinish.substr(tempFinish.length-5, 2);
				var tempEndM = tempFinish.substr(tempFinish.length-2, 2);


				(Math.round(60/parseFloat(tempM))==1) ? tempM="30" : tempM="00" ;
				tempHM = tempH + "_" + tempM;

				if (document.getElementById(tempHM)){

					//Create icon div based on event type
					switch(tempIconID){					
						case 1: //Calendar item
						  var tempIconClass = 'iconMiniCalendar';
						  break; 				
						case 2: //Target
						  var tempIconClass = 'iconMiniTarget';
						  break; 
						case 3: //Task
						  var tempIconClass = 'iconMiniTask';
						  break;
					}
					tempIconElm = document.createElement('div');
					tempIconElm.className = tempIconClass;

					//Create event item div
					tempEventElm = document.createElement('div');
					tempEventElm.id = tempId;
					tempEventElm.onclick = new Function("go('" + tempUrl + "')");
					tempEventElm.className = 'eventItem';
					tempEventElm.appendChild(tempIconElm);
					tempEventElm.innerHTML += tempName;
					document.body.appendChild(tempEventElm);

					//Position event item relative to corresponding time slot and resize to fit
					var eventElmPos = findPos($(tempHM));
					$(tempId).style.top = eventElmPos[1] +YOffset + 'px';
					$(tempId).style.left = eventElmPos[0] +XOffset +(timeSlotWidth * i) + 'px';
					$(tempId).style.width = timeSlotWidth -8 + 'px';
					$(tempId).style.height = timeSlotHeight + 'px';
					$(tempId).style.display = 'block';
//					$(tempId).style.top = '-' + timeSlotHeight -4 + 'px';

					//Apply colour settings
					if(tempTxtCol != '') $(tempId).style.color = getValidColor(tempTxtCol);
					if(tempBgCol != '') $(tempId).style.backgroundColor = getValidColor(tempBgCol);

					//Add a tooltip for this event
					var ttip = addToolTip(tempId);
					ttip.style.display="none";

					//Add tooltip content
					var tempContent = "<div class='tthead'><div class='"+ tempIconClass +"'></div>" + tempToolTipText + "</div><div class='ttbody'><b>Start:</b> " + tempTime + "<br><b>End:</b> " + tempFinish + "</div>";
					ttip.innerHTML = tempContent;
				}
				//Clear vars
				tempId = "";
				tempTime = "";
				tempH = "";
				tempM = "";
				tempHM = "";
				tempContent = "";

			}

			/** END ALL-DAY EVENTS */

			/*
			** DRAW TIMED EVENTS **
			arr_eventIds is a 2-dimensional array of calendar eventIds and corresponding event times.
			created by script in page, at top of page 'Custom content' section.
			*/

			// Set event sizes manually for now
			timeSlotHeight = 12;			
			timeSlotWidth = 134;
			if ((arr_eventIds.length) > 5)
			{
				timeSlotWidth = (672/arr_eventIds.length);
			}

			// Loop through each event in array attaching it to the corresponding timeslot element
			for (i=0; i<arr_eventIds.length; i++){

				//Set temp vars for current event
				var tempId = arr_eventIds[i][0];
				var tempTime = arr_eventIds[i][1];
				var tempFinish = arr_eventIds[i][2];
				var tempName = arr_eventIds[i][3];
				var tempToolTipText = arr_eventIds[i][7];
				var tempUrl = arr_eventIds[i][4];
				var tempTxtCol = arr_eventIds[i][5];
				var tempBgCol = arr_eventIds[i][6];
				// TempH = the starting Hour of this event
				var tempH = tempTime.substr(tempTime.length-5, 2);
				// tempM = the starting Minutes past the hour of this event
				var tempM = tempTime.substr(tempTime.length-2, 2);
				// tempEndH = the finishing Hour of this event
				var tempEndH = tempFinish.substr(tempFinish.length-5, 2);
				// tempEndM = the finishing Minutes past the hour of this event
				var tempEndM = tempFinish.substr(tempFinish.length-2, 2);

				switch(tempM)
				{
				case '00':
				case '05':
				case '10':
				  var Start_Hour_Slots = 4;
				  var offset=0;
				  break;   
				case '15':
				case '20':
				case '25':
				  var Start_Hour_Slots = 3;
				  var offset=6;
				  break;
				case '30':
				case '35':
				case '40':
				  var Start_Hour_Slots = 2;
				  var offset=12;
				  break;
				case '45':
				case '50':
				case '55':
				  var Start_Hour_Slots = 1;
				  var offset=18;
				  break;
				}
				//alert("Start Hour Slots=" + Start_Hour_Slots);

				switch(tempEndM)
				{
				case '00':
				case '05':
				case '10':
				  var Finish_Hour_Slots = 0;
				  break;   
				case '15':
				case '20':
				case '25':
				  var Finish_Hour_Slots = 1;
				  break;
				case '30':
				case '35':
				case '40':
				  var Finish_Hour_Slots = 2;
				  break;
				case '45':
				case '50':
				case '55':
				  var Finish_Hour_Slots = 3;
				  break;
				}
				
				//alert("end hours:" +tempEndH);
				//alert("start hours:" +tempH);
				if ((tempEndH-tempH) > 1)
				{
					var Num_Whole_Hours = (tempEndH-tempH)-1;
				}
				else
				{
					var Num_Whole_Hours = 0;
				}

				if (tempM == 0)
					{
//					alert("tempM=" & tempM);
					//Num_Whole_Hours=Num_Whole_Hours+1;
					}
			
				//alert("Whole hours:" + Num_Whole_Hours);
				Number_Of_15_Minute_Units = Start_Hour_Slots + (Num_Whole_Hours*4) + Finish_Hour_Slots;
				//alert("Num of 15min slots=" + Number_Of_15_Minute_Units);
				timeSlotHeight = (7.5*Number_Of_15_Minute_Units)-3;
				//alert(timeSlotHeight);
				

				//Round times to nearest 30min slot
			//	(Math.round(60/parseFloat(tempM))==1) ? tempM="30" : tempM="00" ;
				(Math.round(60/parseFloat(tempM))<=2) ? tempM="30" : tempM="00" ;
				tempHM = tempH + "_" + tempM;


				if (document.getElementById(tempHM)){

					//Create icon div based on event type
					tempIconClass = 'iconMiniCalendar';
					tempIconElm = document.createElement('div');
					tempIconElm.className = tempIconClass;
					
					//Create event item div
					tempEventElm = document.createElement('div');
					tempEventElm.setAttribute('id', tempId);
					tempEventElm.onclick = new Function("go('" + tempUrl + "')");
					tempEventElm.className = 'eventItem';
					tempEventElm.appendChild(tempIconElm);
					tempEventElm.innerHTML += tempName;
					document.body.appendChild(tempEventElm);

					//Position event item relative to corresponding time slot and resize to fit
					var eventElmPos = findPos($(tempHM));
					$(tempId).style.top = eventElmPos[1] +YOffset + 'px';
					$(tempId).style.left = eventElmPos[0] +XOffset +(timeSlotWidth * i) + 'px';
					$(tempId).style.width = timeSlotWidth -8 + 'px';
					$(tempId).style.height = timeSlotHeight + 'px';
					$(tempId).style.display = 'block';	

					//Apply colour settings
					if(tempTxtCol != '') $(tempId).style.color = getValidColor(tempTxtCol);
					if(tempBgCol != '') $(tempId).style.backgroundColor = getValidColor(tempBgCol);

					//Add a tooltip for this event
					var ttip = addToolTip(tempId);
					ttip.style.display="none";

					//Add tooltip content
					var tempContent = "<div class='tthead'><div class='"+ tempIconClass +"'></div>" + tempToolTipText + "</div><div class='ttbody'><b>Start:</b> " + tempTime + "<br><b>End:</b> " + tempFinish + "</div>";
					ttip.innerHTML = tempContent;
				}
				//Clear vars
				tempId = "";
				tempTime = "";
				tempH = "";
				tempM = "";
				tempHM = "";
				tempContent = "";
			}

			/** END TIMED EVENTS */

			break;
		case "week" :
			/*-------------------
				WEEK EVENTS
			---------------------
			** DRAW WEEK EVENTS **
			arr_eventIds is a 2-dimensional array of calendar eventIds
			created by script in page, at top of page 'Custom content' section.
			*/

			// Set event sizes
			var timeSlotHeight = 12;
			var eventNameMax = 20;

			// Loop through each event in array attaching it to the corresponding timeslot element
			for (i=0; i<arr_eventIds.length; i++){

				//Set temp vars for current event
				var tempId = arr_eventIds[i][0];
				var tempStart = arr_eventIds[i][1];
				var tempFinish = arr_eventIds[i][2];
				var tempName = arr_eventIds[i][3];
				var tempToolTipText = arr_eventIds[i][7];
				var tempUrl = arr_eventIds[i][4];
				var tempTxtCol = arr_eventIds[i][5];
				var tempBgCol = arr_eventIds[i][6];
				var tempIconID = arr_eventIds[i][8];
				var tempDayTotal = arr_eventIds[i][9];
				var tempDayCount = arr_eventIds[i][10];
				var tempStartDate = tempStart.substr(0, 10);
				var tempEndDate = tempFinish.substr(0, 10);
				var tempDayID = tempId.substr(tempId.length-8, 8);

				if (exists(tempDayID)){

					//Check length of name
					if (tempName.length>eventNameMax){
						tempName=tempName.substr(0,eventNameMax) +"...";
					}
					//Update Names for multi-day events
					if (tempDayTotal>1){
						if (tempDayCount==1){
							tempName = tempName +" >";
						} else if (tempDayCount==(tempDayTotal)){
							tempName = "< "+ tempName;
						} else {
							tempName = "< "+ tempName +" >";
						}
					}

					//Create icon div based on event type
					switch(tempIconID){					
						case 1: //Calendar event
						  var tempIconClass = 'iconMiniCalendar';
						  break; 				
						case 2: //Target
						  var tempIconClass = 'iconMiniTarget';
						  break; 
						case 3: //Task
						  var tempIconClass = 'iconMiniTask';
						  break;
					}
					tempIconElm = document.createElement('div');
					tempIconElm.className = tempIconClass;

					//Create event item div
					tempEventElm = document.createElement('div');
					tempEventElm.id = tempId;
					tempEventElm.onclick = new Function("go('" + tempUrl + "')");
					tempEventElm.className = 'dayItem pointer';
					tempEventElm.appendChild(tempIconElm);
					tempEventElm.innerHTML += tempName;
					$(tempDayID).appendChild(tempEventElm);
					$(tempId).style.display = 'block';
					//$(tempId).style.height = timeSlotHeight + 'px';

					//Apply colour settings
					if(tempTxtCol != '') $(tempId).style.color = getValidColor(tempTxtCol);
					if(tempBgCol != '') $(tempId).style.backgroundColor = getValidColor(tempBgCol);

					//Add a tooltip for this event
					var ttip = addToolTip(tempId);
					ttip.style.display="none";

					//Add tooltip content
					var tempContent = "<div class='tthead'><div class='"+ tempIconClass +"'></div>" + tempToolTipText + "</div><div class='ttbody'><b>Start:</b> " + tempStart + "<br><b>End:</b> " + tempFinish + "</div>";
					ttip.innerHTML = tempContent;
					
				}
				//Clear vars
				tempId = "";
				tempStart = "";
				tempFinish = "";
				tempH = "";
				tempM = "";
				tempHM = "";
				tempContent = "";

			}
			break;
		case "month" :
			/*-------------------
				MONTH EVENTS
			---------------------
			** DRAW MONTH EVENTS **
			arr_eventIds is a 2-dimensional array of calendar eventIds
			created by script in page, at top of page 'Custom content' section.
			*/

			// Set event sizes
			var timeSlotHeight = 12;
			var eventNameMax = 20;

			// Loop through each event in array attaching it to the corresponding timeslot element
			for (i=0; i<arr_eventIds.length; i++){

				//Set temp vars for current event
				var tempId = arr_eventIds[i][0];
				var tempStart = arr_eventIds[i][1];
				var tempFinish = arr_eventIds[i][2];
				var tempName = arr_eventIds[i][3];
				var tempToolTipText = arr_eventIds[i][7];
				var tempUrl = arr_eventIds[i][4];
				var tempTxtCol = arr_eventIds[i][5];
				var tempBgCol = arr_eventIds[i][6];
				var tempIconID = arr_eventIds[i][8];
				var tempDayTotal = arr_eventIds[i][9];
				var tempDayCount = arr_eventIds[i][10];
				var tempStartDate = tempStart.substr(0, 10);
				var tempEndDate = tempFinish.substr(0, 10);
				var tempDayID = tempId.substr(tempId.length-8, 8);

				if (exists(tempDayID)){
					//Check length of name
					if (tempName.length>eventNameMax){
						tempName=tempName.substr(0,eventNameMax) +"...";
					}		
					//Update Names for multi-day events
					if (tempDayTotal>1){
						if (tempDayCount==1){
							tempName = tempName +" >";
						} else if (tempDayCount==(tempDayTotal)){
							tempName = "< "+ tempName;
						} else {
							tempName = "< "+ tempName +" >";
						}
					}

					//Create icon div based on event type
					switch(tempIconID){					
						case 1: //Calendar event
						  var tempIconClass = 'iconMiniCalendar';
						  break; 				
						case 2: //Target
						  var tempIconClass = 'iconMiniTarget';
						  break; 
						case 3: //Task
						  var tempIconClass = 'iconMiniTask';
						  break;
					}
					tempIconElm = document.createElement('div');
					tempIconElm.className = tempIconClass;

					//Create event item div
					tempEventElm = document.createElement('div');
					tempEventElm.id = tempId;
					tempEventElm.onclick = new Function("go('" + tempUrl + "')");
					tempEventElm.className = 'dayItem pointer';
					tempEventElm.appendChild(tempIconElm);
					tempEventElm.innerHTML += tempName;
					$(tempDayID).appendChild(tempEventElm);
					$(tempId).style.display = 'block';
					//$(tempId).style.height = timeSlotHeight + 'px';

					//Apply colour settings
					if(tempTxtCol != '') $(tempId).style.color = getValidColor(tempTxtCol);
					if(tempBgCol != '') $(tempId).style.backgroundColor = getValidColor(tempBgCol);

					//Add a tooltip for this event
					var ttip = addToolTip(tempId);
					ttip.style.display="none";

					//Add tooltip content
					var tempContent = "<div class='tthead'><div class='"+ tempIconClass +"'></div>" + tempToolTipText + "</div><div class='ttbody'><b>Start:</b> " + tempStart + "<br><b>End:</b> " + tempFinish + "</div>";
					ttip.innerHTML = tempContent;

				}
				//Clear vars
				tempId = "";
				tempStart = "";
				tempH = "";
				tempM = "";
				tempHM = "";
				tempContent = "";
			}
			break;
		default:
			break;
	}
}

//Find position of obj relative to page
function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}



//Get scrolling offsets
function getScrollXY() {
	var scrOfX = 0, scrOfY = 0;
	if( typeof( window.pageYOffset ) == 'number' ) {
		//Netscape compliant
		scrOfY = window.pageYOffset;
		scrOfX = window.pageXOffset;
	} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
		//DOM compliant
		scrOfY = document.body.scrollTop;
		scrOfX = document.body.scrollLeft;
	} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
		//IE6 standards compliant mode
		scrOfY = document.documentElement.scrollTop;
		scrOfX = document.documentElement.scrollLeft;
	}
	return [ scrOfX, scrOfY ];
	//window.alert( 'Horizontal scrolling = ' + scrOfX + '\nVertical scrolling = ' + scrOfY );
}

function getY(oElement){
	var iReturnValue = 0;
	while( oElement != null ){
		iReturnValue += oElement.offsetTop;
		oElement = oElement.offsetParent;
	}
	return iReturnValue;
}

//Tooltip functions
function addToolTip(obj){

	//Create new tooltip element
	var tt = document.createElement('div');
	tt.setAttribute('id', 'tt_' + obj);
	tt.className = 'ttbox';
	tt.id = 'ttbox';
	//tt.innerHTML = 'Tool Tip';
	document.body.appendChild(tt);
	
	//Set tooltip properties
	Tooltip.add(obj, tt);
	Tooltip.showEvent = "mouseover";
	Tooltip.hideEvent = "mouseout";
//	Tooltip.showMethod = "Effect.BlindDown";
//	Tooltip.hideMethod = "Effect.BlindUp";
	Tooltip.fade = 0.1; //Secs
	//Tooltip.closeText = "";
	Tooltip.autoFollowMouse = true;
	Tooltip.autoHideTimeout = 0.1;

	//Fix issue with clickanywhere in FF
	Tooltip.autoHideClick = false;
	return tt;
}

// Create groups tooltip
function groupsToolTip(parentId,groupsContent){
//alert("groupsToolTip");
//	var tempId = 
	
	//Add a tooltip for this event
	var ttip = addToolTip(parentId);

	//Add tooltip content
	var tempContent = "<div class='tthead'>Members of groups:</div><div class='ttbody'>" + groupsContent + "</div>";
	//alert("tempContent: " + groupsContent);
	//alert("ttip: " + ttip);
	ttip.innerHTML = tempContent;


}

function createToolTip(){
	//Create new tooltip element
	tt = document.createElement('div');
	tt.setAttribute('id', 'gtooltip');
	tt.className = 'ttbox';
	tt.style.position = "absolute";
	tt.style.display = 'none';
	tt.style.width = '150px';
	document.body.appendChild(tt);
}
function updateToolTip(a){ 
	tt = document.getElementById("gtooltip");
	if (tt.style.display="none"){

		var toolTipContent = "";
		var toolTipHeader = "";
		if (arguments.length>1){
			groupInfo = "<ul class='ttList' id='ttList'>";
			for (var x = 3; x < arguments.length; x++) {
				if(x==arguments.length-1){
					//Hide underline from last group in list
					toolTipContent += "<li style='border-bottom:none;' id='lastgroup'>"+ arguments[x] +"</li>";
				} else {
					toolTipContent += "<li>"+ arguments[x] +"</li>";
				}
			};
			toolTipContent += "</ul>"
		} else {
			toolTipContent = "(No groups found)";
		}

		if(arguments[2]!="") toolTipHeader = "<div class='tthead'>"+arguments[2]+"</div>"

		//Add height marker to test tooltip height
		groupInfo += "<span id='heightmarker'></span>"
		
		//Update tooltip content
		tt.style.width=arguments[1]+'px'; //change the width of the tooltip
		tt.innerHTML = toolTipHeader +"<div class='ttbody'>"+ toolTipContent +"</div>";
		
		e = arguments[0]

		//Update tooltip position
		scrollXY = getScrollXY();
		var posx = e.clientX + scrollXY[0] +15;
		var posy = e.clientY + scrollXY[1] -30;
		//Check tooltip will fit on screen - if not adjust position accordingly
		tt_width = parseInt(tt.style.width)
		tt_height = arguments.length * 20 //estimate tt height (based on group count)
		if((posx + tt_width) > getClientWidth()) posx = posx - tt_width -40;
		if((posx + tt_height) > getClientWidth()) posy = posy - tt_height +20;
		tt.style.left = posx + "px";
		tt.style.top = posy + "px";

		//Clear effects queue
		var queue = Effect.Queues.get('ttscope');
		queue.each(function(e) { e.cancel() });
		//Fade tooltip in
		Effect.Appear(tt,{duration:0.1, queue: {position:'end', scope: 'ttscope', limit:1} });
		//var ttt;
		//ttt=setTimeout("hideGroupsToolTip()", 8000);
		
	}
}		
function hideToolTip(){
	tt = document.getElementById("gtooltip");

	//Clear effects queue
	var queue = Effect.Queues.get('ttscope');
	queue.each(function(e) { e.cancel() });

	//Fade tooltip out
	Effect.Fade('gtooltip',{duration:0.5, queue: {position:'end', scope: 'ttscope', limit:1} }); 
	//tt.innerHTML = "";
}	


/* General tooltip function
Params: 
	obj - name for tooltip (will be prefixed with 'tt_')
	ttContent - text content to display in tooltip
	ttWidth - 'auto' / pixel width (only pixel width will detect right-hand edge of screen) */
function addGeneralToolTip(obj,ttContent,ttWidth){

	//Create new tooltip element
	var att = document.createElement('div');
	att.setAttribute('id', 'tt_' + obj);
	att.className = 'ttbox';
	document.body.appendChild(att);
	att.style.display="none";
	(ttWidth=="auto")? att.style.width = ttWidth : att.style.width = ttWidth + "px";
	
	//Set tooltip properties
	Tooltip.add($(obj),att);
	Tooltip.showEvent = "mouseover";
	Tooltip.hideEvent = "mouseout";
	Tooltip.fade = 0.1; //Secs	
	Tooltip.autoHideClick = false; //Fix issue with clickanywhere in FF

	//Add tooltip content
	var attTempContent = "<div class='ttbody'>" + ttContent + "</div>";
	att.innerHTML = attTempContent;
}


// Update table styles for forms
// Change style of first column in each row to "tdfirst"
function updateFormStyle(){
	docFormTables = document.getElementsByClassName('classTable');
	for (h=0;h<docFormTables.length;h++){
		formTBody = docFormTables[h].childNodes;
		for (i=0;i<formTBody.length;i++ ){ //<tbody>
			formChildRows = formTBody[i].childNodes;
			for (j=0;j<formChildRows.length;j++){ //<tr>s
				//alert("formChildRows.length: " + formChildRows.length);
				formChildCells = formChildRows[j].childNodes
				fc = 0;
				for (k=0;k<formChildCells.length;k++){ //<td>s
					if ((formChildCells[k].nodeType == 1) && (fc==0)){ //Select only Ist element node
						formChildCells[k].className = "tdfirst";
						fc = 1;
					}
				}
			}
		}
	}
}


// Tryout altering menu without page refresh
function addMenuItemTest(){
//		myObj = document.getElementById('menuBarItem2');
//		alert("myObj.id: " + myObj.id);
//		myObj.addMenuBarItem("*test*");
//		myObj.addMenuBarItem(new menuBarItem("*Test*"));
//		myObj.addMenuItem(new menuItem("mmmmm", "", "#"));
//		refreshMenuItems(myObj);

		
		
		newMenuItem = new jsDOMenu(160);
		with (newMenuItem) {
			addMenuItem(new menuItem("Menu Item", "", "#"));
		}

		menuBar = new jsDOMenuBar("static", "topMenuBar", "", "", 800); //CREATE MAIN MENU ITEMS
		with (menuBar) {
			// Add new item with flyout menu (created above)
			addMenuBarItem(new menuBarItem("Menu Bar Item", newMenuItem, "", "", "window.open('http://www.google.com')"));

			// Add new item without flyout menu (NB. can only have a link if there is no flyout)
			//addMenuBarItem(new menuBarItem("Menu Bar Item 2", "", "", "", "http://www.google.com"));	//Open URL in same window
			addMenuBarItem(new menuBarItem("Menu Bar Item 2", "", "", "", "javascript:void(window.open('http://www.google.co.uk'))"));	//Open URL in new window
			setActivateMode("over"); //Set menu to work on rollover
		}
		
		/*menuBarObj = document.getElementById('topMenuBar');
		alert("menuBarObj items: " + menuBarObj.items[1]);
		myObj = menuBarObj.items['DOmenu1'];
		myObj= document.getElementById('DOmenu1');
		alert("myObj: " + myObj);
		with (myObj) {
			addMenuItem(new menuItem("New Menu Item", "", "#"));
		}*/
		//myObj = document.getElementById('DOMenu1').getElementsByTagName("DIV")[0];
		//alert("Name: " + myObj.id);
		document.getElementById('DOMenu1').getElementsByTagName('div')[0].setDisplayText('Hello');
	}

//Get Querystring variable
function getQueryVariable(variable,queryURL) {
  if (queryURL!=undefined)
  {
	  var query=queryURL.substr(queryURL.indexOf("?")+1);
  } else {
	  var query = window.location.search.substring(1);
  }
  var vars = query.split("&");
  for (var i=0;i<vars.length;i++) {
    var pair = vars[i].split("=");
    if (pair[0] == variable) {
      return pair[1];
    }
  } 
  return false;
  //alert('Query Variable ' + variable + ' not found');
}

//Example protptype ajax script
function XFindUsers(){
	var url = 'ajaxStudents.asp';
	var pars = 'ay=2&estid=1130&userid=58';
	var target = 'UsersDiv';

	var myAjax = new Ajax.Updater(target, url, {
		onCreate: function() { if($('notification') && Ajax.activeRequestCount > 0)
			Effect.Appear('notification',{duration: 0.25, queue: 'end'});
		},
		onComplete: function() { if($('notification') && Ajax.activeRequestCount == 0)
			Effect.Fade('notification',{duration: 0.25, queue: 'end'});
			initialize;
		},
		method: 'get', parameters: pars
		}
	);
}

/*
function editRegion(regionRef){
	//Get region edit info from xml file
	editM = new Ajax.Request('/web_common/theme1/xml/editMenus.xml', {
		method: 'get'
		onSuccess: function(){
			
			alert(editM.responseText);
		}
		});
	//Load menu in page
}*/


// Runs on document load.
// Can pass 'pageRef' from ASP in: /asp_common/includes/styles_inc.asp

//search for the right panel box

function SubmitPaging(pagenum)
{
	document.getElementById("curpage").value = pagenum;
	var allNodes = Form.serialize("frmSearch");
	var pars = allNodes;
	new Ajax.Updater('region3Main', 'search.asp', {parameters:pars, method: 'get'});
}


function SubmitPaging_Resources(pagenum)
{
	var curpage = document.getElementById("curpage").value;
	var orderby = document.getElementById("orderby").value;
	var groupid = document.getElementById("groupid").value;
	var restype = document.getElementById("restype").value;
	var newresname = document.getElementById("newresname").value;
	var pars = "curpage=" + pagenum + "&orderby=" + orderby + "&newresname=" + newresname + "&groupid=" + groupid + "&restype=" + restype;
	new Ajax.Updater('region5Main', 'searchresources_main.asp', {parameters:pars, method: 'get'});
}



function SubmitSearchRHS(){
	var allNodes = Form.serialize("frmSearchRHS");
	var pars = allNodes;
	if (! exists('region3Main')){
		//Search box doesn't exist so create it
		drawMainSearch();
		//Turn content off so it will slide open
		$('region3Main').style.display="none";
	}
	new Ajax.Updater('region3Main', 'search.asp', {
		parameters:pars, 
		method: 'get',
		onComplete:function(){
			highlightSearch();
		}
	});
}

function SubmitSearchResources(option){
	if((option==undefined)||(option=='mini')){ //Searching from default.asp
		var pars=Form.serialize("frmSearchResourcesMain");

	/*	//the query comes from the right hand side strip
		if (option=='mini')	{
			$("SearchResourceName").value=$("miniSearchResourceName").value;
			pars+="&"+Form.serializeElements($("frmSearchResourcesMini").getInputs('text','miniSearchResourceName'));
		}
		pars+="&type=searchResources";
		pars+="&page_from=default";
		if (! exists('region5Main')){
			//Search box doesn't exist so create it
			drawMainSearch5();
			//Turn content off so it will slide open
			$('region5Main').style.display="none";
		}
		new Ajax.Updater('resourceSearch', 'ajaxResources.asp', {
			parameters:pars, 
			method: 'get',
			onComplete:function(){
				highlightSearchResources();
			}
		});*/
		
		var strSubType=$("frmSearchResourcesMain").subType.value;
		var objSearchTarget=$('searchresources_main').down('.content');
		var mainLoader='loading5Main';		
		//Add loader to sub-content
		objSearchTarget.update("<div id='sub_"+mainLoader+"' class='loadingAjax' style='text-align:center;background-position:56% 50%;padding:3px'>Loading...</div>");
		hideLoader('loading5Main'); //Don't show main loader
		new Ajax.Updater(objSearchTarget, 'ajaxResources.asp', {
			parameters:pars, 
			method: 'get',
			onComplete:function(){
				hideLoader('sub_'+mainLoader);
			}
		});

	} else { //searching from other pages EG. folder_view
		var pars=Form.serialize($("frmSearchResourcesMini"));
		var strSubType=$("frmSearchResourcesMini").subType.value;
		var objSearchTarget=$('searchresources').down('.content');
		var mainLoader='loading2Right';		
		//Add loader to sub-content
		objSearchTarget.update("<div id='sub_"+mainLoader+"' class='loadingAjax' style='text-align:center;background-position:75% 50%;padding:3px'>Loading...</div>");
		hideLoader('loading2Right'); //Don't show main loader
		new Ajax.Updater(objSearchTarget, 'ajaxResources.asp', {
			parameters:pars, 
			method: 'get',
			onComplete:function(){
				hideLoader('sub_'+mainLoader);
			}
		});		
	}
}

function loadSubType(elmID,ajaxPage,ajaxParams,loaderID){
	//Add loader to sub-content
	if (loaderID=='loading5Main'){
		bgPos='56% 50%';
	}else{
		bgPos='75% 50%';
	}
	$(elmID).down('.content').update("<div id='sub_"+loaderID+"' class='loadingAjax' style='text-align:center;background-position:"+bgPos+";padding:3px'>Loading...</div>");
	hideLoader(loaderID); //Don't show main loader
	new Ajax.Updater(elmID, ajaxPage, {
		parameters: ajaxParams, 
		method: 'get',
		onComplete:function(){
			hideLoader('sub_'+loaderID);
		}
	});
}

function GetTaggedResources(tagID,tagWord,frmID){
	//Update form values
	$(frmID).tag_id.value=tagID;
	$(frmID).tag_word.value=tagWord;
	var elemType=frmID.substr(18);
	//alert("elemType: "+ elemType);
	if(elemType=="Mini"){
		var pageRef=$(frmID).page_from.value
		SubmitSearchResources('mini_'+pageRef);
	}else{
		SubmitSearchResources();
	}
}

function GetResourcesFrom(fromILP,fromName,frmID){
	//Update form values
	$(frmID).from_ilp.value=fromILP;
	$(frmID).from_name.value=fromName;
	var elemType=frmID.substr(18);
	//alert("elemType: "+ elemType);
	if(elemType=="Mini"){
		var pageRef=$(frmID).page_from.value
		SubmitSearchResources('mini_'+pageRef);
	}else{
		SubmitSearchResources();
	}
}

function GoPageResources(numpage)
{
	document.frmSearchResourcesMain.curpagelist.value=numpage;
	SubmitSearchResources();
}

function GoPageResourcesMini(numpage)
{
	document.frmSearchResourcesMini.curpagelist.value=numpage;
	var pageRef=document.frmSearchResourcesMini.page_from.value
	SubmitSearchResources('mini_'+pageRef);
}

function GoPageGroupsHome(numpage)
{
	document.frmGroupsHome.curpagegroups.value=numpage;
	new Ajax.Updater('region2Main', 'ajaxFunctions.asp', {parameters:'page=home_groups&curpagegroups='+numpage, method: 'get', onComplete:function(){hideLoader('loading2Main');Effect.SlideDown('region2Main');}});
}

function GoMiniGroupsHome1(numpage)
{
	document.frmMiniGroupsHome1.curpageminigroups1.value=numpage;
	new Ajax.Updater('groupslist1', 'ajaxFunctions.asp', {parameters:'viewMode=0&gtid=1&type=RHGroups&curpageminigroups1='+numpage, method: 'get', onComplete:function(){hideLoader('loading1Right')}});
}

function GoMiniGroupsHome2(numpage)
{
	document.frmMiniGroupsHome2.curpageminigroups2.value=numpage;
	new Ajax.Updater('groupslist2', 'ajaxFunctions.asp', {parameters:'viewMode=0&gtid=2&type=RHGroups&curpageminigroups2='+numpage, method: 'get', onComplete:function(){hideLoader('loading2Right')}});
}

function GoMiniGroupsHome3(numpage)
{
	document.frmMiniGroupsHome3.curpageminigroups3.value=numpage;
	new Ajax.Updater('groupslist3', 'ajaxFunctions.asp', {parameters:'viewMode=0&gtid=3&type=RHGroups&curpageminigroups3='+numpage, method: 'get', onComplete:function(){hideLoader('loading3Right')}});
}

function GoMiniGroupsHome4(numpage)
{
	document.frmMiniGroupsHome4.curpageminigroups4.value=numpage;
	new Ajax.Updater('groupslist4', 'ajaxFunctions.asp', {parameters:'viewMode=0&gtid=4&type=RHGroups&curpageminigroups4='+numpage, method: 'get', onComplete:function(){hideLoader('loading4Right')}});
}

//region1Main
//groupslistmain

function SubmitSearchMain(){
	if(exists('searchInfo')) $('searchInfo').hide();
	$('loadingSearch').show();
	var allNodes = Form.serialize("frmSearch");
	var pars = allNodes;
	new Ajax.Updater('region3Main', 'search.asp', {parameters:pars, method: 'get'});
}

//Search for students with flags or alerts
function SubmitSearchFlagsAlerts(searchType,searchTypeValue){
	var pars = String(searchType) +"="+ searchTypeValue;
	if(String(searchType)=="alertType") pars = pars +"&chkCompactMode=0";
	//alert("Pars: " + pars);
	if (! exists('region3Main')){
		//Search box doesn't exist so create it
		drawMainSearch();
		//Turn content off so it will slide open
		$('region3Main').style.display="none";
	}
	new Ajax.Updater('region3Main', 'search.asp', {
		parameters:pars, 
		method: 'get',
		onComplete:function(){
			highlightSearch();
		}
	});
}

//
function resubmitSearch(){
	var pars=""
	if (getQueryVariable("lastname")!=""){
		pars = "lastname=" + getQueryVariable("lastname");
	} else if ((getQueryVariable("showflag")==1) || (getQueryVariable("alerttype")>0)){
		pars = window.location.search.substring(1);
	}
	if (pars != ""){
		if (! exists('region3Main')){
			//Search box doesn't exist so create it
			drawMainSearch();
			//Turn content off so it will slide open
			$('region3Main').style.display="none";
		}
		//Resubmit search using querystring
		new Ajax.Updater('region3Main', 'search.asp', {
			parameters:pars, 
			method: 'get',
			onComplete:function(){
				highlightSearch();
			}
		});
	}
}

function highlightSearchResources(){
	//Scroll page to top
	//Check page elements
	if (exists('region5Main')){
		if ($('region5Main').visible()==false){
			//Search box is minimized so expand
			setArrowDown($('region5Arrow'));
			Effect.toggle('region5Main','appear');
		}
	}
	if (exists('region1Main')){
		if ($('region1Main').visible()==true){
			//Minimise Mail
			setArrowRight($('region1Arrow'));
			Effect.toggle('region1Main','appear');  
		}
	}
	if (exists('region2Main')){
		if ($('region2Main').visible()==true){
			//Minimize Groups
			setArrowRight($('region2Arrow'));
			Effect.toggle('region2Main','appear');
		}
	}
	if (exists('region3Main')){
		if ($('region3Main').visible()==true){
			//Minimize Groups
			setArrowRight($('region3Arrow'));
			Effect.toggle('region3Main','appear');
		}
	}
	new Element.scrollTo('mainItem_5');

}



function highlightSearch(){
	//Scroll page to top
	new Element.scrollTo('mainCol');
	//Check page elements
	if (exists('region3Main')){
		if ($('region3Main').visible()==false){
			//Search box is minimized so expand
			setArrowDown($('region3Arrow'));
			Effect.toggle('region3Main','blind');
		}
	}
	if (exists('region1Main')){
		if ($('region1Main').visible()==true){
			//Minimise Mail
			setArrowRight($('region1Arrow'));
			Effect.toggle('region1Main','blind');  
		}
	}
	if (exists('region2Main')){
		if ($('region2Main').visible()==true){
			//Minimize Groups
			setArrowRight($('region2Arrow'));
			Effect.toggle('region2Main','blind');
		}
	}
}

function docOnLoad(pageRef){
	switch(pageRef){
		case "login" :
			//Update login button style for safari/opera
			document.getElementById('rowLoginButton').display = convertDisplayParam('block');
			//Put cursor in login box
			document.forms[0].elements["userid"].focus();
			break;
		case "default" :


			//display the alerts welcome popup
			// NP - removed for now as content of popup is not finalised
//			if (document.referrer.indexOf('login.asp')>0) ajaxPopup('login_pop.asp?width=450&height=300');
			//Load groups info with prototype ajax call

			/* NP - disable for now as causing error
			new Ajax.Updater('flagsAndAlerts', 'flagsandalerts_summary.asp', {method: 'get'}); */

			//Load main groups element
			//new Ajax.Updater('groupslistmain', 'groups_main_summary.asp', {parameters:'viewMode=0', method: 'get'});

			/*******  PERSONALISED LAYOUT ********/

			//get the hashlayout array populated from the database in functions.js
				
			//make the content boxes visible
			$H(hashLayout).each(function(hashList){
				var box=hashList.key;
				hashLayout[hashList.key].each(function(obj,i) {
					var box_element=box+'_'+obj.item;
					box_element=box_element.replace("Col","Item");
					$(box_element).show();
				});
			});

			$H(hashLayout).each(function(hashList){
				//Initialize variables
				var arrOrder=[];
				var arrFolded=[];
				var arrItems2Display=[];
				var currentItem='';
				var currentFolder='';
				//Check the settings for each element in the page (main/right section)
				hashLayout[hashList.key].each(function(num,index) {
								//read the Boxes settings
								$H(hashLayout[hashList.key][index]).each(function(boxItem) {
									if (boxItem.key=='item')
									{
										currentItem=boxItem.value;
										arrOrder.push(currentItem);
									}
									if (boxItem.key=='folOpened' && boxItem.value==false){arrFolded.push(currentFolder);}
									if (boxItem.key=='folObj'){
										currentFolder=boxItem.value;
										arrItems2Display.push(currentFolder);
									}
								});	
				});	
				//Send the ordered array to the draggable elements
				Sortable.setSequence (hashList.key,arrOrder);

				//Close the elements as per settings
				arrFolded.each(function(item){
						if (exists(item)){
							var imgArrowElement=$(item).previous('.headRow').down('.arrowDown').down('img');
							toggleArrow(imgArrowElement,item);
							$(item).hide();
						}
				});

				//Do an ajax call for each of the elements in the user home page settings
				arrItems2Display.each(function(item){
						//ajax call only for the home page user visible boxes
						switch(item){
							case "region5Right" :
								new Ajax.Updater('calendar', 'calendar_summary.asp', {method: 'get', onComplete:function(){hideLoader('loading5Right')}});
								break;
							case "region3Right" :
								new Ajax.Updater('groupslist3', 'ajaxFunctions.asp', {parameters:'viewMode=0&gtid=3&type=RHGroups', method: 'get', onComplete:function(){hideLoader('loading3Right')}});
								break;
							case "region1Right" :
								new Ajax.Updater('groupslist1', 'ajaxFunctions.asp', {parameters:'viewMode=0&gtid=1&type=RHGroups', method: 'get', onComplete:function(){hideLoader('loading1Right')}});
								break;
							case "region2Right" :
								new Ajax.Updater('groupslist2', 'ajaxFunctions.asp', {parameters:'viewMode=0&gtid=2&type=RHGroups', method: 'get', onComplete:function(){hideLoader('loading2Right')}});
								break;
							case "region4Right" :
								new Ajax.Updater('groupslist4', 'ajaxFunctions.asp', {parameters:'viewMode=0&gtid=4&type=RHGroups', method: 'get', onComplete:function(){hideLoader('loading4Right')}});
								break;
							case "region6Right" :
								new Ajax.Updater('search', 'search_rhs.asp', {parameters:'lastname=', method: 'get', evalScripts: true, onComplete:function(){hideLoader('loading6Right')}});
								break;
							case "region7Right" :
								new Ajax.Updater('tasks', 'view_tasks.asp', {method: 'get', onComplete:function(){hideLoader('loading7Right')}});
								break;
							case "region8Right" :
								new Ajax.Updater('mysettings', 'mysettings.asp', {parameters:'lastname=', method: 'get', onComplete:function(){hideLoader('loading8Right')}});
								break;
							case "region9Right" :
								new Ajax.Updater('flagstutorcomments', 'flags_tutorcomments_summary.asp', {method: 'get', onComplete:function(){hideLoader('loading9Right')}});
								break;
							case "region10Right" :
								new Ajax.Updater('searchresources', 'ajaxResources.asp', {parameters:'type=RH_Resources&subType=tags&page_from=default', method: 'get', onComplete:function(){hideLoader('loading10Right')}});
								break;
							case "region1Main" : //main messages box
								new Ajax.Updater('region1Main', 'ajaxMessages.asp', {parameters:'type=messagesList&pagefrom=default', method: 'get', onComplete:function(){hideLoader('loading1Main')}});
								break;
							case "region3Main" : //main search users
								new Ajax.Updater('region3Main', 'search.asp', {parameters:'lastname=', method: 'get', onComplete:function(){hideLoader('loading3Main')}});
								break;
							case "region5Main" : //resources search 
								new Ajax.Updater('searchresources_main', 'ajaxResources.asp', {parameters:'type=LH_Resources&subType=tags&page_from=default', method: 'get', onComplete:function(){hideLoader('loading5Main')}});
								break;
							case "region4Main" : //timetable sessions
								new Ajax.Updater('region4Main', 'ajaxFunctions.asp', {parameters:'page=home_timetable', method: 'get', onComplete:function(){hideLoader('loading4Main')}});
								break;
							case "region2Main" : //my groups 
								new Ajax.Updater('region2Main', 'ajaxFunctions.asp', {parameters:'page=home_groups', method: 'get', onComplete:function(){hideLoader('loading2Main');Effect.SlideDown('region2Main');}});
								break;
							case "region6Main" : //shortcuts box students only)
								new Ajax.Updater('region6Main', 'ajaxFunctions.asp', {parameters:'page=home_shortcuts', method: 'get', onComplete:function(){hideLoader('loading6Main')}});
								break;
						}
				});
			});
			//Create tooltip
			createToolTip();
			//Check QS for search params
			resubmitSearch();
			break;
		case "calendar" :
			//Allow space for right column
			document.getElementById('mainCol').style.marginRight = '209px';
			//Load calendar info with ajax
			// NP - Now called from calendar.asp
			//new Ajax.Updater('calendar', 'calendar_summary.asp', {parameters:'dayid=5&monthid=6&yearid=2007', method: 'get'});
			//makerequest('calendar_summary.asp', 'calendar');
			//Position calendar events
			position_events();
			break;
		case "datasets" :
			//Turn on 1st tab
			//document.getElementById('tabid0').parentNode.className = "tabmenuitemon";
			//hover('tabid0', 'tabitemonarrow');
			//Make mainCol full width
			//document.getElementById('mainCol').style.marginRight = '0px';
			//Create tooltip
			createToolTip();
			break;
		case "folderView" :
			//alert("folder id: "+ getQueryVariable('fid'));
		//	if (getQueryVariable('fid')==0){
		//		document.getElementById('mainCol').style.marginRight = '0px';
		//	} else {
				//Allow space for right column
				document.getElementById('mainCol').style.marginRight = '209px';
				//Ajax loader for sub-folders at bottom of main page 'folder_view.asp' 
		//	}
			break;
		default :
			Ajax.Responders.register({
				onCreate : startLoading,
				onComplete : stopLoading
			});

			if(((exists('rightCol'))) && (exists('mainCol'))){
				document.getElementById('mainCol').style.marginRight = '209px';
			}
			//Create groups tooltip if required
			if(classExists('iconGroup')) createToolTip();
	}

	//Turn off flyout menus when click anywhere on body.	
	if(document.addEventListener){document.body.addEventListener("click",hideVisibleMenus,true);} //Moz
	if(document.attachEvent){document.body.attachEvent("onclick",hideVisibleMenus);} //IE
	
	//Change style for 1st column of table with class='classTable' - used in most forms.
	//updateFormStyle();
	
	if(pageRef!="login"){
		sessionCountdown(); //Check for session timeout every second
	}
}

function docOnUnLoad(pageRef){
	//alert("unloading");
	switch(pageRef){
		case "login" :
			
			break;
		default :
			/*
				Remove all mouse events on page unload
				as these are causing FF to show JS errors 
			*/
			//Clear all mouse event listeners from main document
			docMouseOvers = getElementsByAttribute(document.body,'onmouseover');
			for(var i=0; i<docMouseOvers.length; i++){
				docMouseOvers[i].onmouseover=null;
				docMouseOvers[i].onmouseout=null;
				docMouseOvers[i].onclick=null;
			}
			//Clear all mouse event listeners from menubar
			var menuBarParts = [];
			getEBArecursive(menuBarParts, $("topMenuBar"), 'id');
			for(var i=0; i<menuBarParts.length; i++){
				menuBarParts[i].onmouseover=null;
				menuBarParts[i].onmouseout=null;
				menuBarParts[i].onclick=null;
			}
			//Clear all mouse event listeners from each flyout menu
			var menusList=document.getElementsByClassName("jsdomenudiv");
			for(var i=0; i<menusList.length; i++){
				var menuParts = [];
				getEBArecursive(menuParts, menusList[i], 'id');
				for(var j=0; j<menuParts.length; j++){
					menuParts[j].onmouseover=null;
					menuParts[j].onmouseout=null;
					menuParts[j].onclick=null;
				}
			}
			//Remove event listeners that turn off flyout menus when click anywhere on body.	
			if(document.removeEventListener){document.body.removeEventListener("click",hideVisibleMenus,true);} //Moz
			if(document.detachEvent){document.body.detachEvent("onclick",hideVisibleMenus);} //IE

			// END: Remove all mouse events on page unload
	}
}

// Returns list of elements below specified 'node' with specified 'att'ribute
// Uses getEBArecursive to loop through all child-nodes of 'node'
function getElementsByAttribute(node, att){
	var rv = [];
	getEBArecursive(rv, node, att);
	return rv;
}
function getEBArecursive(list, node, att){
	for(var i=node.childNodes.length-1; i>=0; i--){
		var child = node.childNodes.item(i);
		if(child.nodeType==1){
			if(child.getAttribute(att)){
				list.push(child);
			}
			getEBArecursive(list, child, att);
		}
	}
}


function getElementByAttribute(tagn,attrib,str){
	var A=document.getElementsByTagName(tagn);
	var O;
	var L=A.length;
	for(var i=0;i<L;i++){
		var tem=A[i];
		if(tem.getAttribute(attrib)&& tem.getAttribute(attrib)==str){
			O=tem;
			break;
		}
	}
	return O;
}
/*
function getElementsByAttribute(tagn,attrib,str){
	var A=document.getElementsByTagName(tagn);
	var O=new Array();;
	var L=A.length;
	for(var i=0;i<L;i++){
		var tem=A[i];
		if(tem.getAttribute(attrib)){
			if(str) tem.getAttribute(attrib)==str) O.push(tem);
			else O.push(tem);
	}
	return O;
}*/




function go(url,target){
	if((target == undefined) || (target == '')){
		document.location.href = url;
	} else {
		window.open(url,target);
	}
}






/* Moved to page head		
// Swap class of object
function hover(obj,newClass){
	//alert(typeof obj);
	if (typeof obj == 'object'){
		obj.className = newClass;
	} else {
		document.getElementById(obj).className = newClass;
	}
}
*/

// Swap button image
function btnHover(obj,state,ext){
	var oldName=obj.src;
	var newName="";
	if (state=="on")
	{
		newName=oldName.substring(0,oldName.length-4) +"_"+ state + ext;
		obj.src=newName;
	} else {
		newName=oldName.substring(0,oldName.length-7) + ext;
		obj.src=newName;
	}
}

// Swap tab content
function showContent(contentID){
	contentDivs = document.getElementsByClassName('content');
	for(i=0;i<contentDivs.length;i++){
		contentDivs[i].style.display = "none";
	}
	document.getElementById('content'+contentID).style.display = "block";

	tabs = document.getElementById('tabmenu').getElementsByTagName('a');
	for(i=0;i<tabs.length;i++){
		if (tabs[i].className=="active"){
			tabs[i].className = "none";
		}
	}
	document.getElementById(contentID.toLowerCase()+'Cell').className = "active";
	/*tabs = document.getElementById('tabmenu').getElementsByTagName('span');
	for(i=0;i<tabs.length;i++){
		if (tabs[i].className=="tabmenuitemon"){
			tabs[i].className = "tabmenuitem";
		}
	}
	document.getElementById(contentID.toLowerCase()+'Cell').parentNode().className = "tabmenuitemon";*/

}
function showContent_temp(contentID){
	contentDivs = document.getElementsByClassName('content');
	for(i=0;i<contentDivs.length;i++){
		contentDivs[i].style.display = "none";
	}
	document.getElementById('content'+contentID).style.display = "block";

	if (document.getElementById('tabmenu')!= undefined){
		tabs = document.getElementById('tabmenu').getElementsByTagName('span');
		for(i=0;i<tabs.length;i++){
			if (tabs[i].className=="tabmenuitemon"){
				tabs[i].className = "tabmenuitem";
			}
		}
		currentTab = document.getElementById(contentID.toLowerCase()+'Cell');
	//	currentTab.className = "tabmenuitemon";
	//	currentTab.getElementsByClassName('tabitemarrow').className = "tabitemonarrow";
		//currentTab.removeEventListener('mouseover');
		//currentTab.removeEventListener('mouseout');
	}

}

//Change the styles of the tabmenu items when swapping from tab to tab option with ajax calls
function switchTabs(){
//	if (navigator.userAgent.indexOf("MSIE 6")==-1){
		var tabitems=$$(".tabmenu span");
		var tabText="";
		var spanElem="";
		tabitems.each(function(item,idx) {
			tabText=item.id.toUpperCase();
			tabText=tabText.replace("CELL","");
			tabText=tabText.charAt(0)+tabText.substring(1).toLowerCase();
			if ((idx+1)==$('intTabOn').value) {
				var spanTpl=new Template("<span id=\"#{itemid}\" class=\"tabmenuitemon\" onclick=\"\" onmouseout=\"\" onmouseover=\"\">#{tabtext}<div id=\"tabid#{tab}\" class=\"tabitemonarrow\"></div></span>");
				spanElem+= spanTpl.evaluate({itemid:item.id, tab:idx,tabtext:tabText});
			} else {
				var spanTpl=new Template("<span id=\"#{itemid}\" class=\"tabmenuitem\" onmouseout=\"hover(this,'tabmenuitem');\" onmouseover=\"hover(this,'tabmenuitemover');\" onclick=\"ChangeTabs(#{tab});\">#{tabtext}<div id=\"tabid#{tab}\" class=\"tabitemarrow\"></div></span>");
				spanElem+= spanTpl.evaluate({itemid:item.id, tab:idx,tabtext:tabText});
			}
		});
		$('tabmenu').update(spanElem);
//	}
}

//Select all entry checkboxes
function selectAllEntries(theElement,theColumn,theMethod){
	 var theForm = theElement.form, z = 0;
//	 var listUsers='';
	 var checkvalue=false;
	 for(z=0; z<theForm.length;z++)
	 {
			if (theMethod=='all')
			{
			//Select/unselect all checkboxes when the main check box is selected or unselected
				if(theForm[z].type == 'checkbox' && theForm[z].name != 'chk'+theColumn+'All'){
					//alert("item:" + z + " disabled: " + theForm[z].disabled);
					if ((theForm[z].name=='chk'+theColumn) && (theForm[z].disabled != true))
					{
						theForm[z].checked = theElement.checked;
//							listUsers=listUsers +  theForm[z].value + ',';
						checkvalue=theElement.checked;
					}
			}
			}
			//Unselect the all checkboxes when a element is unselected
			if (theMethod=='single')
			{
				if(theForm[z].type == 'checkbox' && theForm[z].name == 'chk'+theColumn+'All' && theForm[z].checked==true){
							theForm[z].checked = theElement.checked;
				}			
			}
		}

//	if (!listUsers=='') {checkedElements(listUsers,checkvalue,theColumn);}
}



// AJAX - Standard request script

var xmlhttp = false;

// Setup xmlhttp object based on browser type being used
//Check if we are using IE.
try
{
	//If the javascript version > 5.
	xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	//alert("Using IE with JS 5+");
}
catch (e)
{
	//If not, then use older active X object.
	try
	{
		//If using IE
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		//alert("Using IE");
	}
	catch (E)
	{
		//Else we must be using a non-IE browser.
		xmlhttp = false;
	}
}

//If we are using a non-IE browser, create a javascript instance of the object.
if (!xmlhttp && XMLHttpRequest != 'undefined')
{
	xmlhttp = new XMLHttpRequest();
	//alert("Not using IE");
}

// Basic request function
function makerequest(serverPage, objID){
	//alert("Requesting: " + serverPage);
	var obj = document.getElementById(objID);
	xmlhttp.open("GET", serverPage);
	xmlhttp.onreadystatechange = function(){
		if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
		{
			// Text version
			obj.innerHTML = xmlhttp.responseText;

			//XML version
//			var xmldoc = xmlhttp.responseXML;
//			var root_node = xmldoc.getElementsByTagName('root').item(0);
//			alert("Root node: " + root_node.firstChild.data);
//			obj.innerHTML = root_node.firstChild.data;
			
			//Parse XML doc
//			parseXML(xmldoc, objID)
		}
	}
	xmlhttp.send(null);
}

function getResource(resource,destination,target) {
	var url="/ajaxResources.asp";
	var pars="type=counthit&resource=" + resource;

	new Ajax.Request(url, {method: 'get',parameters:pars,
		onComplete: function() {
						if (destination!="") go(destination,target);
					}
	});
}

// Save layout settings from the lightbox popup pagesettings_pop.asp
function SaveLayoutSettings() {
	var pars='mode=savesettings&'+$('frmLayoutSettings').serialize();
	new Ajax.Request('ajaxSaveLayout.asp', {
		onLoading: function() {
			ajaxPopup('loading_pop.asp?width=300&height=70&msg=Uploading+home+page...');
			},
		onComplete: function() {
			// NP - Added timeout to allow FF time to display loading message
			loadingTimeout = setTimeout('window.location.href="/default.asp"', 1000);
			}
		,method: 'post',postBody:pars});
}


function showLoader(loader)
{
	if (!loaded){
		var arrLoaders = document.getElementsByClassName("loadingAjax");
		for(i=0; i<arrLoaders.length;i++){
			$(arrLoaders[i].id).show();
		}
		if (exists('loadingAjax'))$('loadingAjax').show();
	}
}

function startLoading() {
	loaded = false;
	window.setTimeout("showLoader('loadingAjax')", 1000);
}

function stopLoading() {
	var arrLoaders = document.getElementsByClassName("loadingAjax");
	for(i=0; i<arrLoaders.length;i++){
		$(arrLoaders[i].id).hide();
	}
	if (exists('loadingAjax'))$('loadingAjax').hide();
	loaded = true;
}	

function hideLoader(loader)
{ 
	if (exists(loader))	{
		$(loader).hide();
		if (exists('debug') && exists('version')) {
			var arrLoaders = document.getElementsByClassName("loadingAjax");
			var allLoaded=true;
			for(i=0; i<arrLoaders.length;i++){
				if ($(arrLoaders[i].id).visible()) 
				{	allLoaded=false;
					break;
				}
			}
			if (allLoaded) {
				endTime=new Date().getTime();
				//document.getElementById('estNameHolder').innerHTML='Loading time : '+((endTime-startTime)/1000)+' seconds.';
			}
		}
	}
}

// Initiate page setting popup (now called from flyout menu)
function pageSettings(){
	ajaxPopup('pagesettings_pop.asp?pop=1&width=500&height=400');
}

//called from teachinggroup_join.asp and teachinggroup_approve.asp
function staffTGJoin(groupID){
	ajaxPopup('teachinggroupstaff_pop.asp?pop=1&width=500&height=400&groupID='+groupID);
}


function showDatePicker(picker){
	var pickers = document.getElementsByClassName('datePickerContent');
	//Hide of all pickers
	for(i=0; i<pickers.length;i++){
		pickers[i].style.visibility = "hidden";
	}
	//Show required picker
	if (picker != "") $(picker).style.visibility = "visible";
}

//Set style.display of specified section of form 
function displayFormField(fieldObj,state){
	if ($(fieldObj)!= null){
		if (state=="hide"){
			$(fieldObj).style.display = "none";
		} else {
			if ($(fieldObj).nodeName=="TR"){ //Table row needs alternative display format for Moz
				$(fieldObj).style.display = convertDisplayParam("block");
			} else {
				$(fieldObj).style.display = "block";
			}
		}
	}
}


//Create attachments lightbox
function attachmentsLightBox(strWidth,strHeight)
{
	/*
	getContentScript = "FlashFileUpload/ajaxFileUpload.asp";	

	// Create a hidden link via DOM, then fire it off...
	var html_doc = document.getElementsByTagName('body').item(0);
    var link = document.createElement('a');
    link.setAttribute('id', 'tempLink');
    link.setAttribute('href', getContentScript+'?width='+strWidth+'&height='+strHeight);
    link.setAttribute('class', 'lbOn');
    link.setAttribute('style', 'display:none');
    html_doc.appendChild(link);

    tempLightbox = new lightbox($("tempLink"));

	tempLightbox.activate();
	*/
	
	//$("FileUploadPlaceHolder").innerHTML = strUploader;


	Effect.toggle($("FlashFileUpload"),'blind');
	
	//$("FlashFileUpload").style.visibility="visible";

	//JStestCall('This is a test');
}


//Find index of passed value in array
//EG. myArray.findIndex(search_value)
Array.prototype.findIndex = function(value){
	var ctr = -1;
	for (var i=0; i < this.length; i++) {
		// use === to check for Matches. ie., identical (===), ;
		if (this[i] == value){
			return i;
		}
	}
	return ctr;
};


//Print current page
function printPage(){
	window.print();
}


/*----------------------------
Javascript DateDiff function
------------------------------
Needs date in format YYYY-MM-DD
*/
var DayName=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
var oneMinute=1000*60;
var intervalObject=new Object();
intervalObject["yyyy"]={units:1000*60*60*24*365,measure:"year"};
intervalObject["m"]={units:1000*60*60*24*30,measure:"month"};
intervalObject["d"]={units:1000*60*60*24,measure:"day"};
intervalObject["Q"]={units:intervalObject["m"].units*3,measure:"quarter"};
intervalObject["H"]={units:oneMinute*60,measure:"hour"};
intervalObject["N"]={units:oneMinute,measure:"minute"};
intervalObject["S"]={units:1000,measure:"second"};

function DateDiff(dateAddObj){
	this.interval=dateAddObj.interval;
	this.date1=dateAddObj.date1;
	this.date2=dateAddObj.date2;
	this.calculate=calculateDateDiff;
	this.calculate();
}

Date.prototype.DateDiff=DateDiff;

function calculateDateDiff(){
	var paramDate1=new String(this.date1);
	splitDate1=paramDate1.split("-");
	paramDateYear1=splitDate1[0];
	paramDateMonth1=splitDate1[1]-1;
	paramDateDay1=splitDate1[2];
	if(paramDateMonth1>12){
		alert("Invalid Month!");
		return false;
	}
	if(paramDateDay1>31){
		alert("Invalid Day!");
		return false;
	}
	
	
	var paramDate2=new String(this.date2);
	splitDate2=paramDate2.split("-");
	paramDateYear2=splitDate2[0];
	paramDateMonth2=splitDate2[1]-1;
	paramDateDay2=splitDate2[2];
	if(paramDateMonth2>12){
		alert("Invalid Month!");
		return false;
	}
	if(paramDateDay2>31){
		alert("Invalid Day!");
		return false;
	}
	
			
	var paramDate1Object=new Date(paramDateYear1,paramDateMonth1,paramDateDay1);
	paramDate1Object.setHours(0);
	paramDate1Object.setMinutes(0);
	paramDate1Object.setSeconds(0);
	//paramDate1Object.getTimezoneOffset() * oneMinute;
	var paramDate1ObjectTime=paramDate1Object.getTime();
	
	
	var paramDate2Object=new Date(paramDateYear2,paramDateMonth2,paramDateDay2);
	paramDate2Object.setHours(0);
	paramDate2Object.setMinutes(0);
	paramDate2Object.setSeconds(0);
	var paramDate2ObjectTime=paramDate2Object.getTime();
	
	if(paramDate2Object>paramDate1Object){
		DSTAdjust=(paramDate2Object.getTimezoneOffset() - paramDate1Object.getTimezoneOffset()) * oneMinute;
		
	}
	else{
		DSTAdjust=(paramDate1Object.getTimezoneOffset() - paramDate2Object.getTimezoneOffset()) * oneMinute;
	}
	
	if(typeof intervalObject[this.interval]!="undefined"){
		if(typeof intervalObject[this.interval].units=="undefined"){
			alert("Interval is invalid!");
			return false;
		}
		
		var diff=Math.abs(paramDate2ObjectTime-paramDate1ObjectTime) - DSTAdjust;
		var timeDiff=Math.floor(diff/intervalObject[this.interval].units);
		if(timeDiff>1){
			var rname=intervalObject[this.interval].measure + "s";
		}
		else{
			var rname=intervalObject[this.interval].measure;
		}
		
		this.difference=parseInt(timeDiff);
	}
	else{
		this.difference="Wrong format of interval!";
	
	}
	
}

/*--------------------------------
END: Javascript DateDiff function
--------------------------------*/


//Toggle template headings on/off
function templateToggle(obj,iconObj){
	//obj_content=obj.id+'_content';
	Effect.toggle(obj,'blind',{afterFinish:function(){
		//Update +/- icon
		if ($(obj).style.display=="none"){
			iconObj.className='iconMiniPlus pointer';
		} else {
			iconObj.className='iconMiniMinus pointer';
		}
	}});
	
}

//Expand/collapse all template headings
function templateToggleAll(objClass,iconParentObjClass,state){
	var arr_headings=document.getElementsByClassName(objClass);
	var arr_icon_parents=document.getElementsByClassName(iconParentObjClass);
	for (i=0; i<arr_headings.length; i++){
		//alert("heading: "+ arr_headings[i].id);
		//alert("icon: "+ arr_icon_parents[i].firstChild);
		if (state=='expand'){ //Expand All
			if (arr_headings[i].style.display=="none"){
				templateToggle(arr_headings[i],arr_icon_parents[i].firstChild);
			}
		} else { //Collapse All
			if (arr_headings[i].style.display!="none"){
				templateToggle(arr_headings[i],arr_icon_parents[i].firstChild);
			}
		} 
	}
}

//add comments entry popup code
function initComment4EntriesPop() {
	Event.observe("comment_subject", "keydown", function(event) {
		if (event.keyCode == 13) {
			$('comment_text').activate();
			return false;
			};
	});

	Event.observe("frmAddComment4Entry", "submit", function(event) {
		Event.stop(event);
	});
	$('comment_subject').activate();
}

// ************************************ MESSAGES FUNCTIONS ******************************************

function DoActionMessages(option){
	var url = '/ajaxMessages.asp';
	var pageName=getPageName();
	var pars = 'type=delete_message&pagefrom='+pageName;

	if (confirm('Are you sure you want to delete the selected message(s)?')) {
		new Ajax.Request(url,{method: 'get', parameters: pars, asynchronous:true, evalScripts:true, 
			onComplete:function(t){
				if (t.responseText!='empty') {
					if (pageName=='default') new Ajax.Updater('region1Main', 'ajaxMessages.asp', {parameters:'type=messagesList&pagefrom=default', method: 'get', onComplete:function(){hideLoader('loading1Main')}});
					else MessagesList();
					$('msgOption').update(t.responseText);
					new Effect.Highlight($('msgOption'), {startcolor:'#FFFC00',
						endcolor:'#ffffff',
						duration: 5,
						from: 0,
						to: 1,
						beforeStart: function() {
							$('msgOption').show();

						},
						afterFinish: function() {
							new Effect.Fade($('msgOption'));
						}
					});
				}
			}
		});
	}

}

function initMessagePop(email_id,isSent){
	if (isSent==0) {
		if ($('drag'+email_id).hasClassName('rowHilight')) {
			// if is an unread mail, change his status
			$('drag'+email_id).removeClassName('rowHilight');
			$('drag'+email_id).addClassName('row');
			$('item'+email_id).down('div').removeClassName('iconMailUnread');
			$('item'+email_id).down('div').addClassName('iconMailRead');
			$('item'+email_id).down('div').setStyle({backgroundImage:'url(/web_common/images/icons/mail_read.png)'});
		}
	}

	if (exists('filecontent')) {
		var url = '/ajaxMessages.asp';
		var target = 'messageContent';
		var pars = "type=getcontent&file="+$("filecontent").value;

		new Ajax.Updater(target, url, {method: 'get', parameters: pars});
	}
}	

// ************************************ USERS POPUP LIGHTBOX FUNCTIONS ******************************************

// Display select users pop up from any screen
function initPopSelectUsers(name) {
	new Form.Element.Observer('lstSelectedUsersPopUp'+name,0.5,
	  function(el, value){
		if ($('lstSelectedUsersPopUp'+name).value!='')
		{
			arrSelectedUsers=$('lstSelectedUsersPopUp'+name).value.split(",");
			$('lstSelectedUsersPopUp'+name).value="";
			var url = '/ajaxUsersPopup.asp';
			var pars = 'type=selectedusers_pop_results&pagefrom='+getPageName()+'&name='+name;
			var target = 'cellRecipients'+name;
			var myAjax = new Ajax.Updater(target, url,{method: 'get', parameters: pars, asynchronous:true, evalScripts:true});
			if ($('lightbox').visible()) lightbox.prototype.deactivate();
		}
	  }
	);

	Event.observe("frmSelectUsersPop", "submit", function(event) {
		Event.stop(event);
	});

	Event.observe("txtSurname", "keydown", function(event) {
		if (event.keyCode == 13) {
			SearchUsersPop(1,1);
		}
	});

	if (exists('rowGroups')) // only check groups for 
	{
		Event.observe("grptype", "change", function() {
			if ($F('grptype')!='-1' && $F('grptype')!='-2') {
				var url = '/ajaxFunctions.asp';
				var pars = 'type=multigroups_users_pop';
				pars += '&'+Form.serialize("frmSelectUsersPop");
				var target = 'rowGroups';
				var myAjax = new Ajax.Updater(target, url, 
					{method: 'get', parameters: pars, asynchronous:true, evalScripts:true,
					onLoading: function() {
						showLoader('loadingAjaxUsers');
					},
					onComplete: function() {
						hideLoader('loadingAjaxUsers');
						if (exists('lstGroups')) $('lstGroups').show() ;
						$('rowGroups').show();
					}}
				);
			} else {
				$('rowGroups').hide() ;
				if (exists('lstGroups')) $('lstGroups').hide() ;
			}
		});
	}
}

// Display view users pop up from any screen
function initPopViewUsers(name) {
	if (page==undefined) var page='1';
	$('curpageusers'+name).value=eval(page);
	var url = '/ajaxUsersPopup.asp';
	var pars = 'type=view_users_pop&pagefrom='+getPageName();
	pars += '&'+Form.serialize("frmSelectUsersPop");
	pars += '&record_id='+$('record_id').value;
	var target = 'cellRecipients'+name;
	if (!exists(target)) target='cellRecipientsviewpopup';
	var myAjax = new Ajax.Updater(target, url,{method: 'get', parameters: pars, asynchronous:true, evalScripts:true, onLoading: function() {showLoader('loadingAjaxUsers');},onComplete: function() {hideLoader('loadingAjaxUsers');}});
}

function SearchUsersPop(page,restart,name){
	if (exists($('curpageusers'+name))) $('curpageusers'+name).value=eval(page);
	else $('curpageuserspop').value=eval(page);

	var url = '/ajaxUsersPopup.asp';
	var pageName=getPageName();
	var pars = 'type=select_users_pop&pagefrom='+pageName+'&name='+name;
	pars += '&'+Form.serialize("frmSelectUsersPop");
	if (exists('record_id')) pars += '&record_id='+$('record_id').value;
	if (restart) pars += '&restart=1';
	var target = 'cellResults';
	if ($('chkDisplayResults').checked) { //do not display the results screen
		pars += '&nodisplay=1';
		var myAjax = new Ajax.Request(url,{method: 'get', parameters: pars, asynchronous:true, evalScripts:true, onLoading: function() {showLoader('loadingAjaxUsers');}
		,onComplete: function(t) {
				stopLoading();
				if (pageName=="folder_system"){ 
					var objFolder='editNode'+$('record_id').value;
					var oldText=$(objFolder).innerHTML;
					$(objFolder).update(oldText+' ('+t.responseText+')');
					new Effect.Highlight(objFolder, {startcolor:'#F9FF00', 
						endcolor:'#ffffff',
						duration: 2.5,
						afterFinish: function() {
							$(objFolder).update(oldText);
						}
					});
				}
				if (pageName=="resource_library"){ 
					var objFolder='res'+$('record_id').value;
					var oldText=$(objFolder).innerHTML;
					$(objFolder).update(oldText+' ('+t.responseText+')');
					new Effect.Highlight(objFolder, {startcolor:'#F9FF00', 
						endcolor:'#ffffff',
						duration: 2.5,
						afterFinish: function() {
							$(objFolder).update(oldText);
						}
					});
				}
				$('lstSelectedUsersPopUp'+name).value=t.responseText;
		}});
	} else {
		var myAjax = new Ajax.Updater(target, url,{method: 'get', parameters: pars, asynchronous:true, evalScripts:true, onLoading: function() {showLoader('loadingAjaxUsers');},onComplete: function() {hideLoader('loadingAjaxUsers');}});
	}	
}

function GoPageSelectUsersPop(page,name){
	$('curpageusers'+name).value=eval(page);
	SearchUsersPop($('curpageusers'+name).value,0,name);
}

function GetSelectedUsers(page,restart,name){

	var url = '/ajaxUsersPopup.asp';

	if (name=='viewpopup') {
		var pars = 'type=view_users_pop&pagefrom='+getPageName()+'&name='+name;
	} else{
		var pars = 'type=selectedusers_pop_results&pagefrom='+getPageName()+'&name='+name;
		if (exists('ae')) pars+='&mode='+$('ae').value;
	}

	// adding / editing or viewing the page
	if (exists('record_id')) pars+='&record_id='+$('record_id').value;

	if (exists('curpageusers'+name)) {	
		$('curpageusers'+name).value=eval(page);
		pars+='&curpageusers'+name+'='+$('curpageusers'+name).value;
	}
	var target = 'cellRecipients'+name;
	var myAjax = new Ajax.Updater(target, url,{method: 'get', parameters: pars, asynchronous:true, 
		evalScripts:true, onLoading: function() {
							showLoader('loadingAjaxSelectedUsers');
						  },
						  onComplete: function() {
							hideLoader('loadingAjaxSelectedUsers');
						  }
		});
}

function AddStudentSelectedUser(){
	var url = '/ajaxUsersPopup.asp';
	var pars = 'type=addownuser&pagefrom='+getPageName();
	var myAjax = new Ajax.Request(url,{method: 'get', parameters: pars, asynchronous:true});
}

function GoPageSelectedUsers(page,name){
	$('curpageusers'+name).value=eval(page);
	if (name=='undefined') name=$('selectedpopup').value;
	GetSelectedUsers($('curpageusers'+name).value,0,name);
}

function RemoveSelectedUsers(all,name){
	
	var url = '/ajaxUsersPopup.asp';
	var pagename=getPageName();
	var pars = 'pagefrom='+pagename+'&name='+name;

	if (all!='all')	{ //remove just selected users, otherwise all of them in the page and user logged in
		pars+='&type=selectedusers_remove';
		if (exists('cellRecipients'+name)) {
			var arrRemoveUsers = document.getElementById('cellRecipients'+name).getElementsByTagName('input');
		} else if (pagename=='folder_system' || pagename=='resource_library') {
			var arrRemoveUsers = $('frmSelectUsersPop').select('input');
		}
		var strUsers="";
		for (i=0; i<arrRemoveUsers.length; i++){
			if ((arrRemoveUsers[i].checked) && (arrRemoveUsers[i].id=="chkUsers")) strUsers+=arrRemoveUsers[i].value+",";
		}
		pars+="&chkUsers="+strUsers;
	} else pars+='&type=allusers_remove';

	if (pagename=='folder_system') pars+="&folder="+$('record_id').value;
	if (pagename=='resource_library') pars+="&resource="+$('record_id').value;


	new Ajax.Request(url,{method: 'get', parameters: pars, asynchronous:true, evalScripts:true, 
		onComplete:function(t){
			if (pagename=='folder_system' || pagename=='resource_library') {
				//$('editNode'+$('record_id').value+'_viewusers').value='View users ('+t.responseText+')';
				if (pagename=='resource_library') ResourcesList($('isSearch').value,1);
				else lightbox.prototype.deactivate();
			} else GetSelectedUsers($('curpageusers'+name).value,0,name);
		}
	});
}

// *********************************************************************************************************

// Display templateHeadings.xsl
function initHeadings(resource,isview) {
		$('edit_id').value="";
		$('delete_id').value="";
		var url = '/ajaxResources.asp';
		var pars = 'type=templateHeadings';
		pars += '&'+Form.serialize("frmEditHeadings");
		if (isview==1) pars += '&isView=1'
		var target = 'cellTemplates';
		var myAjax = new Ajax.Updater(target, url, {method: 'get', parameters: pars, asynchronous:true, evalScripts:true,
		onComplete: function() {
			if(exists('tableHeadings')) {
				var countQuestions=0;
				var countSections=0;
				var countSubSections=0;
				var counter=0;
				var arrQuestions = $('tableHeadings').getElementsByTagName('INPUT');
				for (i=0; i<arrQuestions.length; i++){
					switch(arrQuestions[i].name) {
						case "txtOrderSections":
							counter++;
							countSections++;
							countSubSections=0;
							arrQuestions[i].value=countSections;
							arrQuestions[i].tabIndex=counter;
							break;
						case "txtOrderSubSections":
							counter++;
							countSubSections++;
							countQuestions=0;
							arrQuestions[i].value=countSubSections;
							arrQuestions[i].tabIndex=counter;
							break;
						case "txtOrderQuestions":
							counter++;
							countQuestions++;
							arrQuestions[i].value=countQuestions;
							arrQuestions[i].tabIndex=counter;
							break;
					}
				}
			}
		}										
	});
}

//Get screen width / height
function getFrameSize(){
	if (self.innerWidth){
		frameWidth = self.innerWidth;
		frameHeight = self.innerHeight;
		return Array(frameWidth,frameHeight);
	} else if (document.documentElement && document.documentElement.clientWidth){
		frameWidth = document.documentElement.clientWidth;
		frameHeight = document.documentElement.clientHeight;
	} else if (document.body){
		frameWidth = document.body.clientWidth;
		frameHeight = document.body.clientHeight;
	} else {
		return;
	}
	return Array(frameWidth,frameHeight);
}

function AddNewFolder(fromfolder){
	if (fromfolder==0) fromfolder='folder_tree2';

	var parentfolder=$(fromfolder).ancestors();
	if (parentfolder.length>=36) {
		alert('Maximum depth reached');
	} else {
		var parent_folder = (fromfolder=='folder_tree2') ? '0': fromfolder.replace('editNode', '');
		var url = '/ajaxFolders.asp';
		var foldersMode='studentfolders';
		var pars = "parent_id="+parent_folder+"&newfolder=1&frompage="+getPageName();
		if (exists("la_id")) pars+="&la="+$("la_id").value;
		if (exists("es_id")) pars+="&est="+$("es_id").value;
		if (getPageName()=='messages_view') pars+="&email_folder=1";

		//group selected
		if (exists("tg_id")) pars+="&group="+$("tg_id").value;
		if (exists("yg_id")) pars+="&group="+$("yg_id").value;
		if (exists("dp_id")) pars+="&group="+$("dp_id").value;
		if (exists("tu_id")) pars+="&group="+$("tu_id").value;
		if (exists("foldersMode")) {
			pars+="&foldersMode="+$("foldersMode").value;
			foldersMode=$("foldersMode").value;
		}

		new Ajax.Request(url,{method:'get',parameters:pars,
			 onComplete:function(t) {
				var newfid=t.responseText;
				var myElements=$('folder_tree2').immediateDescendants();
				var linkTpl=new Template("<a id=\"nodeATag#{fid}\" href=\"#\"><span id=\"editNode#{fid}\" class=\"treedrop\" title=\"Click To Edit\">#{fname}</span></a>");
				//&nbsp;<span id=\"addSubfolder#{fid}\" onclick=\"AddNewFolder(this.id);\" class=\"pointer\">(<img hspace=\"2\" align=\"absmiddle\" src=\"/web_common/images/icons/addFolder.png\" width=\"8\"/>Add subfolder)</span>");
				linkStr = linkTpl.evaluate({fid:newfid, fname: 'New folder'});
				var li = document.createElement('li');
				li.id = 'node'+newfid;
				li.noadd=true;
				li.norename=false;
				li.nodelete=false;
				li.nodrag=false;
				li.innerHTML = linkStr; 
				var ul = document.createElement('UL');
				ul.style.display='block';
				$('node'+parent_folder).appendChild(ul);
				ul.appendChild(li);
				JSTreeObj.parseNewNode($('node'+newfid));

				new Effect.Highlight('nodeATag'+newfid, {startcolor:'#FFFC00', endcolor:'#ffffff'})

				//Add the new folder in the editinplace list
				EditInPlace.makeEditable({type:'text',id:'editNode'+newfid,folder_id:newfid,group_id:'<%=Request("gid")%>',candelete:'true',candelete:'rename',icon:'false',foldersMode:foldersMode, save_url:'/AjaxFolders.asp'});
				$('loader').style.display = 'none';	

			 }
		});
	}
}


//Get word count in cute editor (stripping out html tags, etc.)
function CountWords(){
	var editor1 = document.getElementById('CE_cuteMessage_ID');
	var CEText=editor1.getHTML();
	CEText=CEText.replace(/<br \/>|\n|&nbsp;/g," ");
	CEText=CEText.replace(/<[^<>]+>/gi,"");
	var CEWords=CEText.split(" ");
	var CEWordsTrim=new Array();
	CEWords.each(function(word,index){
		if(word.length>0) CEWordsTrim.push(word);
	});
	var CEWordCount=CEWordsTrim.length
	 alert("editor text:\n"+ CEText + "\nwords:\n"+ CEWordsTrim +"\ncount:\n"+ CEWordCount);
}


/* Student groups popup */

function displayUserGroups(e,user,username){
	var tarObj='userGroups'+user;
	if($(tarObj).parentNode.style.display=="none"){
		//Close any open group popups
		var grps = document.getElementsByClassName("userGroupsHolder");
		var hideFirst=false;
		for(i=0; i<grps.length;i++){
			if (grps[i].style.display!="none"){
				hideFirst=true;
				$('loading'+user).show();
				Effect.toggle(grps[i],'blind',{
					afterFinish: function(){
						getUserGroups(e,user,username);
					},
					duration: 0.5
				});
			}
			//Hide all loaders
			var curLoader=grps[i].up(0).siblings()[1];
			if(curLoader.style.display!="none") curLoader.hide();
		}
		if(!hideFirst) getUserGroups(e,user,username)
	}
}

function getUserGroups(e,user,username){
	var tarObj='userGroups'+user;
	var adjustObj=$(tarObj).up(1);
	var popWidth=adjustObj.offsetWidth +25;
	var screenDim=getFrameSize();
	//alert("page pos: "+ e.pageX +","+ e.pageY +"\nscreen size: "+ screenDim[0] +","+ screenDim[1]);
	if((e.pageX + popWidth)>screenDim[0]) adjustObj.style.marginLeft=((screenDim[0]-(e.pageX + popWidth)))+"px";
	new Ajax.Updater(tarObj, 'ajaxUserGroupsList.asp', {
		onLoading: function(){
			$('loading'+user).show();	
		},
		onComplete: function(){
			toggleUserGroups($(tarObj).parentNode);
			//checkAttNameLength(35);
			setTimeout("$('loading"+user+"').hide();",1000);
		},
		parameters: {
			uilp: user,
			uname: username,
			evalScripts: true
		}, 
		method: 'get'
	});
}

function toggleUserGroups(Obj){
	Effect.toggle(Obj,'blind',{duration: 0.5});
}

/* END: Student groups popup */



// *** Attachment functions ***

function displayAttachments(tarObj,entId,entName){
	if($(tarObj).parentNode.style.display=="none"){
		//Close any open attachment popups
		var atts = document.getElementsByClassName("attachmentSection");
		var hideFirst=false;
		for(i=0; i<atts.length;i++){
			if (atts[i].style.display!="none"){
				hideFirst=true;
				$('loading'+entId).show();
				Effect.toggle(atts[i],'blind',{
					afterFinish: function(){
						getAttachments(tarObj,entId,entName);
					},
					duration: 0.5
				});
			}
			var curLoader=atts[i].siblings()[1];
			if(curLoader.style.display!="none") curLoader.hide();
		}
		if(!hideFirst) getAttachments(tarObj,entId,entName)
	}
}

function getAttachments(tarObj,entId,entName){
	new Ajax.Updater(tarObj, 'ajaxEntryAttachmentsList.asp', {
		onLoading: function(){
			$('loading'+entId).show();	
		},
		onComplete: function(){
			toggleAttachments($(tarObj).parentNode);
			checkAttNameLength(35);
			setTimeout("$('loading"+entId+"').hide();",500);
		},
		parameters: {
			eid: entId,
			ename: entName,
			showDel: 0,
			type: 'entry_list',
			evalScripts: true
		}, 
		method: 'get'
	});
}

function confirmDelAttachment(entId,file_id,file_name){
	if (confirm('Are you sure you want to delete the attachment \''+ file_name +'\'?')) {
		deleteAttachment(entId,file_id);
	}
}

function deleteAttachment(entId,file_id){
	new Ajax.Updater('entryAttachments'+entId, 'ajaxEntryAttachmentDelete.asp', {
		onComplete: function(){
			//Check name will fit on screen (maxChars)
			checkAttNameLength(35);
		},
		parameters: {
			eid: entId,
			fid: file_id,  
			showDel: 0,
			evalScripts: true
		}, 
		method: 'get'
	});
}

function toggleAttachments(Obj){
	Effect.toggle(Obj,'blind',{duration: 0.5});
}

function checkAttNameLength(maxLength){
	//Add tooltip for longer file names
	//var maxLength=30; //Set max length names to display
	atts = document.getElementsByClassName("attName");
	for(i=0; i<atts.length;i++){
		tempAttID = atts[i].id;
		tempAttName = atts[i].firstChild.nodeValue;
		if(tempAttName.length > maxLength){
			//Crop file name after max chars
			$(tempAttID).innerHTML = tempAttName.substring(0,maxLength-3)+ "...";
			//Add tooltip
			addGeneralToolTip(tempAttID,tempAttName,250);
		}
	}
}

// *** END: Attachment functions ***
