//
// AVScheduler Scripts
// 
	
// from dav glass
$A = YAHOO.util.Anim;
$E = YAHOO.util.Event;
$D = YAHOO.util.Dom;
$T = YAHOO.Tools;
$ = YAHOO.util.Dom.get;
$$ = YAHOO.util.Dom.getElementsByClassName;

YAHOO.namespace ("avs");

// GLOBALS
var timeoutMenu;
var colorHold;
var ActivityIDHold;
var ReservationIDHold;
var PatronEmailHold;
var elActivityHold;
var dlgKbArticle = null;
var dlgClicky = null;
var panel_seven;
var myEditor2;

var lngSchoolID;

//
//
//
function activateClickies() {
	var i;
	var newClickies = $$('cC');
	for (i = 0; i < newClickies.length; i++) {
		$E.addListener(newClickies[i], 'click', fn_ChangeField);
	}
}

//
//
//
function showhide(elementID) {
	var el = $(elementID); 
	if (el.style.display == 'none') {
		el.style.display = 'block';
	}
	else {
		el.style.display = 'none';
	}
}

//
//
//
var callback_ShowArticle = {
	success: function(obj) {
		dlgKbArticle.setBody(obj.responseText);
		dlgKbArticle.show();
		activateClickies();
		$D.setStyle(dlgClicky, 'z-index', 24044); 
	},
	failure: function(o) {
		alert("async error");
	}
};

//
//
//
function showArticle(lngArticleID) {

	// need to add school id
	// alert("showarticle " + lngArticleID + "!");
	var querystring = "?Action=GetArticle&ArticleID=" + lngArticleID;
	transaction = YAHOO.util.Connect.asyncRequest('GET', querystring, callback_ShowArticle); 

}

//
// new 2006-08-15; for reservation form
//
function appendAVCode(avcode) {
	var fldAssignEquipment = $('fldAssignEquipment');
	if (avcode != "!!") {
		fldAssignEquipment.value = fldAssignEquipment.value + avcode + ", ";
	}
}

//
//
//
function batchChangeEquipmentType(oldTypeID, newTypeID) {
	window.location.replace("index.asp?Action=BatchChangeEquipmentType&OldTypeID=" + oldTypeID + "&TypeID=" + newTypeID);
}

//
//
//
function RoundTripTime() {

	var NewHTML = "{Round Trip Time not calculated}";
	var Today = new Date();
	var ThisMillisecond = Today.getTime();
	var y = $('objLocalDifference');
	var SubmitTime = $('objSubmitTime');
	var Difference = (ThisMillisecond - SubmitTime.innerHTML)/1000;
	if (Difference < 200) { NewHTML = 'Round Trip Time = ' + Difference.toString() + ' seconds (only accurate if you did not use your browser\'s Refresh button)'; }
	y.innerHTML = NewHTML;
	
}

//
//
//
function AddSubmitTimeToLink(hyperlink) {
	
	var rightNow = new Date().getTime();
	
	if (hyperlink.indexOf('?') > -1) {
		hyperlink += '&SubmitTime=' + rightNow;
	} else {
		hyperlink += '?SubmitTime=' + rightNow;
	}
	
	// alert(NewHyperLink);	
	window.location.replace(hyperlink);
}

//
// used 2008
//
var callback_ChangeField = {
	success: function(o) {
		// alert("success!");
		var elClicky = o.argument.target;
		$D.replaceClass(elClicky, 'cPending', 'cSuccess');
		if (o.responseText.length === 0) {
			$D.addClass(elClicky,'cCNone');
			o.argument.value.innerHTML = 'None';
		}
		else {
			if (o.argument.select) { 
				o.argument.DefaultEl.innerHTML = o.argument.select.value;
			}
			else {
				$D.removeClass(elClicky,'cCNone');
				o.argument.value.innerHTML = o.responseText;
			}
		}
	},
	failure: function(o) {
		alert("async error");
	},
	argument: {},
	timeout: 10000
};

var timHoldTable, timHoldId, timHoldField, timHoldDefaultEl, timHoldThis;

//
// new - the YUI way! Jan 2007
//
function fn_ChangeField(e) {
	var Table = $$('cT','',this)[0].innerHTML;
	var ID = $$('cI','',this)[0].innerHTML;
	var Field = $$('cF','',this)[0].innerHTML;
	var DefaultEl = $$('cV','',this)[0];
	var Type = $$('cY','',this)[0].innerHTML;
	var Select; // don't get value until we get to the switch
	timHoldDefaultEl = DefaultEl;
	var iDefault;
	if (DefaultEl) { iDefault = DefaultEl.innerHTML; }
	var transaction;
	var querystring;
	// doesn't seem to be used anymore: var Response;
	
	// erase Default if it equals NONE
	if ($D.hasClass(this, 'cCNone')) { iDefault = ''; }
	
	// dlgClicky.render(document.body);
	timHoldTable = Table;
	timHoldId = ID;
	timHoldField = Field;
	timHoldThis = this;
	
	$D.replaceClass(Select, 'cSuccess', 'cPending');
	
	switch(Type) {
		case "DropDown": 
			Select = $$('clickySelect','',this)[0];
			if (Select.value != iDefault) { 
				// alert("dropdown test");
				querystring = "?Action=ChangeFieldAJAX&Table=" + timHoldTable + "&ID=" + timHoldId + "&Field=" + timHoldField + "&Value=" + Select.value;
				callback_ChangeField.argument.target = timHoldThis;
				callback_ChangeField.argument.value = timHoldDefaultEl;
				callback_ChangeField.argument.select = Select;
				callback_ChangeField.argument.DefaultEl = DefaultEl;
				transaction = YAHOO.util.Connect.asyncRequest('GET', querystring, callback_ChangeField); 
				// alert("change " + Default + " to " + Select);
			}
			break;
		case "TrueFalse": 
			// timHoldDefaultEl.innerHTML = 'updating...';
			if (iDefault == "True") {iDefault = "False";} else {iDefault = "True";}
			querystring = "?Action=ChangeFieldAJAX&Table=" + timHoldTable + "&ID=" + timHoldId + "&Field=" + timHoldField + "&Value=" + iDefault;
			callback_ChangeField.argument.target = timHoldThis;
			callback_ChangeField.argument.value = timHoldDefaultEl;
			transaction = YAHOO.util.Connect.asyncRequest('GET', querystring, callback_ChangeField); 
			break;
		default: 
			// alert("test/aaa");
			dlgClicky.cfg.setProperty("context", [this,"tl","bl"]); 
			dlgClicky.show();
			$("objNewValue").value = iDefault;
			$("objNewValue").focus();
			$("objNewValue").select();
	}

}

//
// new - the YUI way! Jan 2007
// called by Tab handler
//
function fn_ChangeField2(clicky) {
	var Table = $$('cT','',clicky)[0].innerHTML;
	var ID = $$('cI','',clicky)[0].innerHTML;
	var Field = $$('cF','',clicky)[0].innerHTML;
	var DefaultEl = $$('cV','',clicky)[0];
	timHoldDefaultEl = DefaultEl;
	var Default = DefaultEl.innerHTML;
	var transaction;
	var querystring;
	// doesn't seem to be used anymore: var Response;
	
	// erase Default if it equals NONE
	if ($D.hasClass(clicky, 'cCNone')) { Default = ''; }

	// dlgClicky.render(document.body);
	timHoldTable = Table;
	timHoldId = ID;
	timHoldField = Field;
	timHoldThis = clicky;
	dlgClicky.cfg.setProperty("context", [clicky,"tl","bl"]); 
	dlgClicky.show();
	$("objNewValue").value = Default;
	$("objNewValue").focus();
	$("objNewValue").select();

}

//
//
//
var handleClickyReturn = function(k, e) {
	//var DefaultEl = $$('cV','',this)[0];
	timHoldDefaultEl.innerHTML = 'updating...';
	$D.replaceClass(timHoldThis, 'cSuccess', 'cPending');
	
	dlgClicky.hide();
	el = $("objNewValue");
	querystring = "?Action=ChangeFieldAJAX&Table=" + timHoldTable + "&ID=" + timHoldId + "&Field=" + timHoldField + "&Value=" + encodeURIComponent(el.value);
	
	// we have to delete these, because they are set when we change a select object, and interfere with the return
	delete callback_ChangeField.argument.select;
	delete callback_ChangeField.argument.DefaultEl;
	
	// alert("test/bbb");
	
	callback_ChangeField.argument.target = timHoldThis;
	callback_ChangeField.argument.value = timHoldDefaultEl;
	transaction = YAHOO.util.Connect.asyncRequest('GET', querystring, callback_ChangeField); 
	return true;
};

//
//
//
var handleClickyTab = function(k, o) {
	
	// stop propagation of TAB, so the browser viewport does not lose focus
	$E.stopEvent(o[1]);
	
	timHoldDefaultEl.innerHTML = 'updating...';
	$D.replaceClass(timHoldThis, 'cSuccess', 'cPending');
	// timHoldThis.style.backgroundColor = 'yellow';
	
	// hide 
	dlgClicky.hide();
	el = $("objNewValue");
	querystring = "?Action=ChangeFieldAJAX&Table=" + timHoldTable + "&ID=" + timHoldId + "&Field=" + timHoldField + "&Value=" + encodeURIComponent(el.value);
	callback_ChangeField.argument.target = timHoldThis;
	callback_ChangeField.argument.value = timHoldDefaultEl;
	transaction = YAHOO.util.Connect.asyncRequest('GET', querystring, callback_ChangeField); 
	
	// NOW find the next element
	// get all cC
	var	allClickies = $$("cC");
	var allClickiesLength = allClickies.length;
	for (var i=0; i<allClickiesLength; i++) {
		if (allClickies[i] == timHoldThis) {
			nextClicky = allClickies[i+1];
			if (!nextClicky) { nextClicky = allClickies[0]; }
			i = allClickiesLength;
		}
	}
	fn_ChangeField2(nextClicky);
	return false;
};

/*
function newClickySuccess(o) {
	alert("success/" + o.responseText);
}

function newClickyFailure(o) {
	alert("failed/" + o.status);
}
*/

function Option_onSelectStart(element)
{
	alert(element.value);
}

//
// FROM INCLUDE-RESERVATION
//
function ReturnNextDayClicky()
{
	$('fldReturnDate').value = "(Next Business Day)";
}
	
//
// FROM INCLUDE-RESERVATION
//	
function TrimS() { 
	return (this.toString() ? this.toString().replace(/\s+$|^\s*/g, "") : "");
}
String.prototype.trim = TrimS;

//
// validate date
//
function validateDate(fld) {

    var RegExPattern = /^(?=\d)(?:(?:(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})|(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))|(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2}))($|\ (?=\d)))?(((0?[1-9]|1[012])(:[0-5]\d){0,2}(\ [AP]M))|([01]\d|2[0-3])(:[0-5]\d){1,2})?$/;

    if ((fld.value.match(RegExPattern)) && (fld.value!=='')) {
        return true; 
    } else {
        return false;
    } 

}

//
// FROM INCLUDE-RESERVATION
//
function isValidTime(timeStr) {
	// Checks if time is in HH:MM:SS AM/PM format.
	// The seconds and AM/PM are optional.

	timeStr = timeStr.trim();
	// alert(timeStr)
	var timePat = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s*(AM|am|A|a|PM|pm|P|p))?$/;
	// original: var timePat = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s?(AM|am|PM|pm))?$/;

	var matchArray = timeStr.match(timePat);
	if (matchArray === null) {
		return [false, null];
	}
		
	hour = matchArray[1];
	minute = matchArray[2];
	second = matchArray[4];
	ampm = matchArray[6];

	if (second === "") {
		second = null; 
	}
	if (ampm === "") {
		ampm = null;
	}
		
	if (hour < 1 || hour > 12) {
		return [false, null];
	}
	if (minute < 0 || minute > 59) {
		return [false, null];
	}
	if (second !== null && (second < 0 || second > 59)) {
		return [false, null];
	}
		
	return [true, hour + ":" + minute + ampm];
	
}

//
// FROM INCLUDE-RESERVATION
//
function ValidateReservationForm() {
	var blnContinue = true;
	var blnThisIsATask = false;
	var PatronID = $('idHiddenPatron');
	var selDeliveryAction = $('selDeliveryAction');
	var selReturnAction = $('selReturnAction');
	var selDeliveryPeriod = $('selDeliveryPeriod');
	var selReturnPeriod = $('selReturnPeriod');
	var fldDeliveryTime = $('fldDeliveryTime');
	var fldReturnTime = $('fldReturnTime');
	var fldDeliveryDate = $('fldDeliveryDate');
	var fldReturnDate = $('fldReturnDate');
	var radDeliveryNoRepeat = $('radDeliveryNoRepeat');
	var radDeliveryRepeatEvery = $('radDeliveryRepeatEvery');
	var radDeliveryRepeatSpecific = $('radDeliveryRepeatSpecific');
	var fldDeliveryNotes = $('fldDeliveryNotes');
	var fldAssignEquipment = $('fldAssignEquipment');
	
	// old:
	// var selDeliveryRoom = $('selDeliveryRoom');	
	
	// no delivery action
	if (+selDeliveryAction.value === 0) {
		selDeliveryAction.style.backgroundColor = "yellow";
		alert("Error on STEP 3: A Delivery Action was not chosen.");
		blnContinue = false;
	} else {
		selDeliveryAction.style.backgroundColor = "";
	}
	
	// equipment can't be in place for a repeating delivery
	// 3=staff already has; 4=already in room for DGS
	if (!radDeliveryNoRepeat.checked && actionAutoComplete[selDeliveryAction.value]) {
		selDeliveryAction.style.backgroundColor = "yellow";
		alert("Error on STEP 3: Equipment cannot already be in place for a repeating delivery.");
		blnContinue = false;
	}
		
	// equipment can't be already returned for a repeating return
	// 6=already returned
	if (!radDeliveryNoRepeat.checked && actionAutoComplete[selReturnAction.value]) {
		selReturnAction.style.backgroundColor = "yellow";
		alert("Error on STEP 4: Equipment cannot already be returned for a repeating return.");
		blnContinue = false;
	}
		
	// set the task flag
	// 11=task; 12=event; 13=repair - was for DGS
	// task/event/repair if delivery action type = "Event"

	if (actionType[selDeliveryAction.value] == "Event") {
		blnThisIsATask = true;
	}

	// No Items Checked
		
	// PatronID - must choose patron UNLESS task is chosen
	// alert("test-please ignore; patron="+selPatron.value+" "+blnThisIsATask);
	

	if ($('idHiddenPatron')) {
		if (+PatronID.value === 0 && !blnThisIsATask) {
			$('inpPatron').style.backgroundColor = "yellow";
			alert("Error on STEP 1: A Patron was not chosen.");
			blnContinue = false;
		} else {
			// alert("test-patronOK");
			$('inpPatron').style.backgroundColor = "";
		}
	}
	
	//		
	// invalid delivery date
	if (!validateDate(fldDeliveryDate)) {
		fldDeliveryDate.style.backgroundColor = "yellow";
		alert("Error on STEP 3: Delivery Date is not valid.");
		blnContinue = false;
	} else {
		fldDeliveryDate.style.backgroundColor = "";
		// fldDeliveryDate.value = DD[1].getMonth()+1 + "/" + DD[1].getDate() + "/" + DD[1].getFullYear();
	}
		
	// DeliveryPeriodID
	if (+selDeliveryPeriod.value === 0) {
		selDeliveryPeriod.style.backgroundColor = "yellow";
		alert("Error on STEP 3: Delivery Period was not chosen.");
		blnContinue = false;
	} else {
		selDeliveryPeriod.style.backgroundColor = "";
	}

	// DeliveryTime 13=Special Time for DGS
	var DT = isValidTime(fldDeliveryTime.value);
	if (!DT[0]) {
		if (periodExactTime[selDeliveryPeriod.value]) {
			fldDeliveryTime.style.backgroundColor = "yellow";
			alert("Error on STEP 3: Special Time was chosen as the Period, but Delivery Time is not valid.");
			blnContinue = false;
		} else {
			if (fldDeliveryTime.value !== "") {
				fldDeliveryTime.style.backgroundColor = "yellow";
				alert("Error on STEP 3: Special Time was NOT chosen as the Period, but Delivery Time still needs to be empty or contain a valid time.");
				blnContinue = false;
			} else {
				fldDeliveryTime.style.backgroundColor = "";
			}
		}
	} else {
		fldDeliveryTime.value = DT[1];
		fldDeliveryTime.style.backgroundColor = "";
	}

	if (blnThisIsATask) {
		if (fldDeliveryNotes.value === "") {
			fldDeliveryNotes.style.backgroundColor = "yellow";
			alert("Error on STEP 3: Delivery Notes must be included for Tasks, Events, and Repairs.");
			blnContinue = false;
		} else {
			fldDeliveryNotes.style.backgroundColor = "";
		}
		if (fldAssignEquipment.value !== "") {
			fldAssignEquipment.style.backgroundColor = "yellow";
			alert("Error on STEP 6: AV Codes cannot be assigned to Tasks, Events, or Repairs.");
			blnContinue = false;
		} else {
			fldAssignEquipment.style.backgroundColor = "";
		}
	}
	
	// alert("here");
		
	// Skip these if it's a TASK
	if (!blnThisIsATask) {
			
		// alert(selDeliveryRoom.value);
		// DeliveryRoomID
		if (+$('objHiddenDeliveryLocation').value === 0) {
			$('inpDeliveryLocation').style.backgroundColor = "yellow";
			alert("Error on STEP 3: The Delivery Room was not selected.");
			blnContinue = false;
		} else {
			$('inpDeliveryLocation').style.backgroundColor = "";
		}
	
		// ReturnActionID
		if (+selReturnAction.value === 0) {
			selReturnAction.style.backgroundColor = "yellow";
			alert("Error on STEP 4: The Return Action was not chosen.");
			blnContinue = false;
		} else {
			selReturnAction.style.backgroundColor = "";
		}

		// ReturnDate
		if ((fldReturnDate.value != "(Same Date as Delivery)") && (fldReturnDate.value != "(Next Business Day)"))
		{
			if (!validateDate(fldReturnDate)) {
				fldReturnDate.style.backgroundColor = "yellow";
				alert("Error on STEP 4: The Return Date is not valid.");
				blnContinue = false;
			}
			else {
	//			if (RD[1].valueOf() < DD[1].valueOf()) {
	//				fldReturnDate.style.backgroundColor = "yellow";
	//				alert("Error on STEP 4: The Return Date cannot be before the Delivery Date.");
	//				blnContinue = false;
	//			} else {
					fldReturnDate.style.backgroundColor = "";
	//			}
			}
		}
	
		// ReturnPeriodID
		if (+selReturnPeriod.value === 0) {
			selReturnPeriod.style.backgroundColor = "yellow";
			alert("Error on STEP 4: The Return Period was not chosen.");
			blnContinue = false;
		} else {
			selReturnPeriod.style.backgroundColor = "";
		}

		// alert("return period exact=" + periodExactTime[selReturnPeriod.value])
		// ReturnTime 13=Special Time for DGS
		var RT = isValidTime(fldReturnTime.value);
		if (!RT[0]) {
			if (periodExactTime[selReturnPeriod.value]) {
				fldReturnTime.style.backgroundColor = "yellow";
				alert("Error on STEP 4: Exact Time was chosen as the Period, but the Return Time is not valid.");
				blnContinue = false;
			} else {
				if (fldReturnTime.value !== "") {
					fldReturnTime.style.backgroundColor = "yellow";
					alert("Error on STEP 4: Exact Time was NOT chosen as the Period, but Return Time still needs to be empty or contain a valid time.");
					blnContinue = false;
				} else {
					fldReturnTime.style.backgroundColor = "";
				}
			}
		} else {
			fldReturnTime.value = RT[1];
			fldReturnTime.style.backgroundColor = "";
		}
	}
	
	// Repeat without Until
	// Repeat on these dates is blank
	// AV code assignment	
		
	return blnContinue;
		
}

//
// FROM INCLUDE-RESERVATION
//
/*
function openPopup() {
    oPopup.document.body.innerHTML = objAVCodes.innerHTML;
    oPopup.show( 0, 30, 240, 170, oShowAVCodes);
}
*/

//
// FROM INCLUDE-RESERVATION
//
function popitup(lngEquipmentTypeID) {
	// alert(lngSchoolID);
	var url = 'popup-month2.asp?sid=' + lngSchoolID + '&EquipmentTypeID=' + lngEquipmentTypeID;
	// alert(url);
	newwindow=window.open(url,'name','height=200,width=200,top=200,left=400,resizable=yes,scrollbars=yes,menubar=no,toolbar=no,status=no,location=no');
	if (window.focus) { newwindow.focus(); }
	return false;
}	

//
// new 2008-1-21 
//
var callback_Activity = {
	success: function(o) {
		// alert("success!");
		// o.argument.target is the Activity DIV Element
		var oldAction = o.argument.oldAction;
		var elActivity = o.argument.target;
		$D.removeClass(elActivity,'cPending');
		$D.removeClass(elActivity,'cCanceled');
		$D.removeClass(elActivity,'cHighlight');
		$D.addClass(elActivity,'cSuccess');
		var elAction;
		if (oldAction == 'clsActivityIncomplete') { 
			elAction = $$('clsActivityIncomplete','',elActivity)[0];
			$D.replaceClass(elAction, 'clsActivityIncomplete', 'clsActivityCompleted');
		}
		if (oldAction == 'clsActivityPassive') { 
			elAction = $$('clsActivityPassive','',elActivity)[0];
			$D.replaceClass(elAction, 'clsActivityPassive', 'clsPassiveCompleted');
		}
		if (oldAction == 'clsTaskIncomplete') { 
			elAction = $$('clsTaskIncomplete','',elActivity)[0];
			$D.replaceClass(elAction, 'clsTaskIncomplete', 'clsTaskCompleted');
		}
		if (oldAction == 'clsActivityCompleted') { 
			elAction = $$('clsActivityCompleted','',elActivity)[0];
			$D.replaceClass(elAction, 'clsActivityCompleted', 'clsActivityIncomplete');
		}
		if (oldAction == 'clsTaskCompleted') { 
			elAction = $$('clsTaskCompleted','',elActivity)[0];
			$D.replaceClass(elAction, 'clsTaskCompleted', 'clsTaskIncomplete');
		}
		if (oldAction == 'clsPassiveCompleted') { 
			elAction = $$('clsPassiveCompleted','',elActivity)[0];
			$D.replaceClass(elAction, 'clsPassiveCompleted', 'clsActivityPassive');
		}
	},
	failure: function(o) {
		alert("async error - callback_ActivityComplete");
	},
	argument: {},
	timeout: 10000
};

//
// 2008-01-08 send email from activity list
//
function sendEmailFromActivityList(patronEmail) {
	$('fldMailTo').value = patronEmail;
	$('fldMailSubject').value = '';
	$('fldMailMessage').value = '';
	panel_seven.show();
	$('fldMailMessage').focus();
	return false;
}
	
//
//
//
function activityMenuAction(actionName) {

	var strQuery;
	var transaction;
	var strQueryBoolean;
	var elAction;
	
	$('objActivityMenu').style.display = "none";
	
	switch(actionName) {
		case 'delete':
			parent.location.href = "?Action=DeleteActivity&ID=" + ActivityIDHold;
			break;
		case 'edit':
			parent.location.href = "?Action=EditReservation&ID=" + ActivityIDHold; 
			break;
		case 'complete':
		case 'incomplete':
			// get the class of the action - then take action
			elAction = $$('clsActivityIncomplete','',elActivityHold)[0];
			if (elAction) {
				strQueryBoolean = 'True';
				callback_Activity.argument.oldAction = 'clsActivityIncomplete';
			}
			elAction = $$('clsActivityCompleted','',elActivityHold)[0];
			if (elAction) { 
				strQueryBoolean = 'False';
				callback_Activity.argument.oldAction = 'clsActivityCompleted';
			}
			elAction = $$('clsTaskIncomplete','',elActivityHold)[0];
			if (elAction) { 
				strQueryBoolean = 'True';
				callback_Activity.argument.oldAction = 'clsTaskIncomplete';
			}
			elAction = $$('clsTaskCompleted','',elActivityHold)[0];
			if (elAction) { 
				strQueryBoolean = 'False';
				callback_Activity.argument.oldAction = 'clsTaskCompleted';
			}
			elAction = $$('clsActivityPassive','',elActivityHold)[0];
			if (elAction) { 
				strQueryBoolean = 'True';
				callback_Activity.argument.oldAction = 'clsActivityPassive';
			}		
			elAction = $$('clsPassiveCompleted','',elActivityHold)[0];
			if (elAction) { 
				strQueryBoolean = 'False';
				callback_Activity.argument.oldAction = 'clsPassiveCompleted';
			}		
			strQuery = "?Action=ChangeFieldAJAX&Table=activities&ID=" + ActivityIDHold + "&Field=Completed&Value=" + strQueryBoolean;
			callback_Activity.argument.target = elActivityHold;
			$D.replaceClass(elActivityHold, 'cHighlight', 'cPending');
			transaction = YAHOO.util.Connect.asyncRequest('GET', strQuery, callback_Activity); 
			break;
		case 'avcodes':
			parent.location.href = "?Action=AssignEquipment&ID=" + ActivityIDHold; 
			break;
		case 'matches':
			parent.location.href = "?Action=ShowReservationMatches&ID=" + ReservationIDHold; 
			break;
		case 'link':
			parent.location.href = "?Action=ShowReservationMatches&ID=" + ReservationIDHold; 
			break;
		case 'hardcopy':
			parent.location.href = "hardcopy.asp?ID=" + ReservationIDHold; 
			break;
		case 'emailPatron':
			sendEmailFromActivityList(PatronEmailHold);
			break;
	}
}


//
// YUI stuff from index
//
// step 1: define the object so it is global
var dlgSimple;
		
var handleSDOK = function(){ this.cancel(); };
	
function submitCallback(obj) {
	// alert("Submission succeeded: " + obj.responseText);
	dlgSimple.setHeader("Success");
	dlgSimple.setBody(obj.responseText);
	dlgSimple.cfg.setProperty("icon",YAHOO.widget.SimpleDialog.ICON_INFO);
	dlgSimple.cfg.setProperty("buttons",[ {text:"OK", handler:handleSDOK, isdefault:true } ]);
	// dlgSimple.render(document.body);
	dlgSimple.show();
}

//
// called when??
//		
function submitFailure(obj) {
	alert("Submission Failed: " + obj.status);
}

//
// change background color a hovered reservation
//
function fn_hoverActivity(e) {
	$D.addClass(this, 'cHighlight');
}

//
// restore background color of a hovered reservation
//
function fn_unHoverActivity(e) {
	$D.removeClass(this, 'cHighlight'); 
}

//
//
//		
function fn_hideMenus() {
	// hide any menu
	clearTimeout(timeoutMenu);
	var objActivityMenu = $('objActivityMenu');
	if (objActivityMenu) { objActivityMenu.style.display = "none"; }
}
	
//
//
//
function fn_ActivityMenu(e) {
	
	// remove timeout in case a menu was already visible
	clearTimeout(timeoutMenu);
	
	// type
	var activityType = $$('type', 'div', this)[0].innerHTML;
	var activityId = $$('activityId', 'div', this)[0].innerHTML;
	var reservationId = $$('reservationId', 'div', this)[0].innerHTML;
	var patronEmail = $$('patronEmail', 'div', this)[0].innerHTML;

	ActivityIDHold = activityId;
	ReservationIDHold = reservationId;
	PatronEmailHold = patronEmail;
	elActivityHold = this;
	
	var objActivityMenu = $('objActivityMenu');
	var objComplete = $('objActivityMenu-Complete');
	var objIncomplete = $('objActivityMenu-Incomplete');
	var objAVCodes = $('objActivityMenu-AVCodes');
	var objHardcopy = $('objActivityMenu-Hardcopy');
	var objEmailPatron = $('objActivityMenu-EmailPatron');

	// make all menu items disappear
	if (objAVCodes) { objAVCodes.style.display = "none"; }
	objHardcopy.style.display = "none";
	if (objComplete) { objComplete.style.display = "none"; }
	if (objIncomplete) { objIncomplete.style.display = "none"; }
	objActivityMenu.style.display = "none";
	if (objEmailPatron) { objEmailPatron.style.display = "none"; }
	
	var intLeftPosition = $E.getPageX(e);
	var intTopPosition = $E.getPageY(e);
				
	if (this.className == 'cS') { return; }
							
	objActivityMenu.style.top = intTopPosition + 'px';  
	objActivityMenu.style.left = intLeftPosition + 'px';  
	
	if (activityType == "event" || activityType == "activity" || activityType == "passive") {
		if (objComplete) { objComplete.style.display = "block"; }
	} else {
		if (objIncomplete) { objIncomplete.style.display = "block"; }
	}
		
	if (activityType == "completedactivity" || activityType == "activity" || activityType == "passive") {
		if (objAVCodes) { objAVCodes.style.display = "block"; }
		objHardcopy.style.display = "block";
	}

	// 2008-01-09 only show patron email link if email exists
	if (patronEmail !== '' && objEmailPatron) { objEmailPatron.style.display = "block"; }

	objActivityMenu.style.display = "inline";  			
	// $E.stopEvent(e);
	
	// set a timeout to remove the menu after 7 seconds
	timeoutMenu = setTimeout(fn_hideMenus, 7000);	

}

//
// hovered over a NAV button
//
function fn_NavMouseOver(e) {
	if ($D.hasClass(this, 'clsNav')) {
		$D.replaceClass(this, 'clsNav', 'clsNavHovered');
	} else {
		$D.replaceClass(this, 'clsNavHovered', 'clsNav');
	}
	$D.setStyle(this, 'opacity', 0.8); 
}

//
// restore NAV button
//
function fn_NavMouseOut(e) {
 	if ($D.hasClass(this, 'clsNav')) {
		$D.replaceClass(this, 'clsNav', 'clsNavHovered');
	} else {
		$D.replaceClass(this, 'clsNavHovered', 'clsNav');
	}
 	$D.setStyle(this, 'opacity', 1.0); 
}
	
//
//
//	
YAHOO.avs.panels = function(){
		
	if ($('objSchoolID')) { 
		lngSchoolID = $('objSchoolID').innerHTML;
	}
	
	YAHOO.util.Dom.setStyle('objShadow', 'background-color', 'black');
	YAHOO.util.Dom.setStyle('objShadow', 'opacity', 0.2);

	var handleCancel = function() {
		this.cancel();
	};
			
	var handleSubmit = function() {
		this.submit();
	};

	panel_seven = new YAHOO.widget.Dialog("panel_seven", 
		{ 
			close:true,  
			visible:false,  
			draggable:true,
			modal:false,
			fixedcenter:true,
			xcontext:['anchorElement','bl','tr'],
			effect:{effect:YAHOO.widget.ContainerEffect.FADE, duration: 0.3},
			constraintoviewport:true
		} 
	); 
				
	var listeners = new YAHOO.util.KeyListener(document, { keys : 27 }, {fn:handleCancel,scope:panel_seven,correctScope:true} );
	panel_seven.cfg.queueProperty("keylisteners", listeners);
	panel_seven.cfg.queueProperty("buttons", [ { text:"Cancel", handler:handleCancel }, { text:"Send Message", handler:handleSubmit }]);
	panel_seven.cfg.queueProperty('postmethod','async');
	panel_seven.callback.success = submitCallback;
	panel_seven.callback.failure = submitFailure;
				
	panel_seven.render(document.body);

	//
	//
	//
	dlgKbArticle = new YAHOO.widget.Dialog("dlgKbArticle", 
		{ 
			close:true,  
			visible:false,  
			draggable:true,
			modal:false,
			fixedcenter:true,
			xcontext:['anchorElement','bl','tr'],
			effect:{effect:YAHOO.widget.ContainerEffect.FADE, duration: 0.3},
			constraintoviewport:true
		} 
	);	
	dlgKbArticle.cfg.queueProperty("keylisteners", listeners);
	dlgKbArticle.cfg.queueProperty("buttons", [ { text:"Done", handler:handleCancel } ]);
	dlgKbArticle.cfg.queueProperty('postmethod','async');
	dlgKbArticle.callback.success = submitCallback;
	dlgKbArticle.callback.failure = submitFailure;
				
	dlgKbArticle.render(document.body);


	//
	// new 2007-1-24 clicky dialog
	//
	dlgClicky = new YAHOO.widget.Dialog("dlgClicky", {
			close: true, visible: false, draggable: true, modal: false, constraintoviewport: true
		}
	);
	var listenerClickyTab = new YAHOO.util.KeyListener(document, { keys:9 }, { fn:handleClickyTab, scope:dlgClicky, correctScope:true } );
	var listenerClickyReturn = new YAHOO.util.KeyListener(document, { keys:[13, 10] }, { fn:handleClickyReturn, scope:dlgClicky, correctScope:true } );
	var listenerClickyEscape = new YAHOO.util.KeyListener(document, { keys:27 }, { fn:handleCancel, scope:dlgClicky, correctScope:true } );
	dlgClicky.cfg.queueProperty("keylisteners", [listenerClickyReturn, listenerClickyTab, listenerClickyEscape]);
	// dlgClicky.cfg.queueProperty("buttons", [ { text:"Cancel", handler:handleCancel }, { text:"Update", handler:handleSubmit }]);
	dlgClicky.cfg.queueProperty('postmethod','async');
	// 2008-01-27 not used? dlgClicky.callback.success = newClickySuccess;
	// 2008-01-27 not used? dlgClicky.callback.failure = newClickyFailure;
	dlgClicky.render(document.body);	
	
	//
	//
	//
	dlgSimple = new YAHOO.widget.SimpleDialog("dlgSimple",
		{
			close:true,
			visible:false,
			draggable:true,
			modal:false,
			fixedcenter:true,
			effect:{effect:YAHOO.widget.ContainerEffect.FADE, duration: 0.3},
			constraintoviewport:true
		}
	);
	dlgSimple.render(document.body);
		
		
	// new 2007-1-20
	// add menu to each clsActivityGrouping
	var reservations = $$('clsActivityGrouping','div');
	for (i = 0; i < reservations.length; i++) {
		$E.addListener(reservations[i], 'click', fn_ActivityMenu);
		$E.addListener(reservations[i], 'mouseover', fn_hoverActivity);
		$E.addListener(reservations[i], 'mouseout', fn_unHoverActivity);	
	}
			
	// new 2007-1-23
	// add effects to NAV buttons
	var navbuttons = $$('clsNav','td');
	for (i = 0; i < navbuttons.length; i++) {
		$E.addListener(navbuttons[i], 'mouseover', fn_NavMouseOver);
		$E.addListener(navbuttons[i], 'mouseout', fn_NavMouseOut);	
	}
	navbuttons = $$('clsNavHovered','td');
	for (i = 0; i < navbuttons.length; i++) {
		$E.addListener(navbuttons[i], 'mouseover', fn_NavMouseOver);
		$E.addListener(navbuttons[i], 'mouseout', fn_NavMouseOut);	
	}
	
	// new 2007-1-23
	// add clicky to all newClickies
	activateClickies();
	
	// 2008-01-17 new rich text editor
	if ($('objPolicies')) {
		var myEditor1 = new YAHOO.widget.SimpleEditor('objPolicies', { 
			height: '150px', 
			width: '522px', 
			dompath: false, //Turns on the bar at the bottom 
			handleSubmit: true
			// toolbar: { titlebar: 'Test123' }
			}
		);
		myEditor1.render(); 
	}
	if ($('RequestHeader')) {
		myEditor2 = new YAHOO.widget.SimpleEditor('RequestHeader', { 
			height: '150px', 
			width: '522px', 
			dompath: true, //Turns on the bar at the bottom 
			handleSubmit: true
			}
		); 
		myEditor2.render(); 
	}
	if ($('objActivitiesHeader')) {
		var myEditor3 = new YAHOO.widget.SimpleEditor('objActivitiesHeader', { 
			height: '150px', 
			width: '522px', 
			dompath: false, //Turns on the bar at the bottom 
			handleSubmit: true
			}
		); 
		myEditor3.render(); 
	}
	if ($('objGuestHeader')) {
		var myEditor4 = new YAHOO.widget.SimpleEditor('objGuestHeader', { 
			height: '150px', 
			width: '522px', 
			dompath: false, //Turns on the bar at the bottom 
			handleSubmit: true
			}
		); 
		myEditor4.render(); 
	}

	/* autocomplete for reservation patron */
	//
	//
	//
	if ($('frmReservation')) {
		// An XHR DataSource
		var schemaDeliveryLocation = ["ResultSet.Result", "Name", "ID"];
		var dsDeliveryLocations = new YAHOO.widget.DS_XHR('index.asp', schemaDeliveryLocation);
		dsDeliveryLocations.responseType = YAHOO.widget.DS_XHR.TYPE_JSON; 
		dsDeliveryLocations.queryMatchContains = true;
		// dsDeliveryLocations.scriptQueryParam = "Action";
		dsDeliveryLocations.scriptQueryAppend = "Action=JSONDeliveryLocations";
			
		var acDeliveryLocations = new YAHOO.widget.AutoComplete("inpDeliveryLocation","acDeliveryLocationContainer", dsDeliveryLocations);
		acDeliveryLocations.animVert = false; 
		// acDeliveryLocations.delimChar = ",";
		// acDeliveryLocations.typeAhead = true;
		acDeliveryLocations.forceSelection = true; 
		// acDeliveryLocations.useIFrame = true; 
		acDeliveryLocations.maxResultsDisplayed = 200; 
		acDeliveryLocations.minQueryLength = 2;
			
		var acDeliveryLocationsHandler = function(sType, aArgs) {
			var aData = aArgs[2];
			var id = aData[1]; // depends on where in your schema "id" is defined
			// alert("id="+id);
			$("objHiddenDeliveryLocation").value = id;
		};
		
		acDeliveryLocations.itemSelectEvent.subscribe(acDeliveryLocationsHandler);
	}
	
	//
	//
	//
	if ($('frmReservation')) {
		// An XHR DataSource
		var schemaReturnLocation = ["ResultSet.Result", "Name", "ID"];
		var dsReturnLocations = new YAHOO.widget.DS_XHR('index.asp', schemaReturnLocation);
		dsReturnLocations.responseType = YAHOO.widget.DS_XHR.TYPE_JSON; 
		dsReturnLocations.queryMatchContains = true;
		// dsReturnLocations.scriptQueryParam = "Action";
		dsReturnLocations.scriptQueryAppend = "Action=JSONReturnLocations";
			
		var acReturnLocations = new YAHOO.widget.AutoComplete("inpReturnLocation","acReturnLocationContainer", dsReturnLocations);
		acReturnLocations.animVert = false; 
		// acReturnLocations.delimChar = ",";
		// acReturnLocations.typeAhead = true;
		acReturnLocations.forceSelection = true; 
		// acReturnLocations.useIFrame = true; 
		acReturnLocations.maxResultsDisplayed = 200; 
		acReturnLocations.minQueryLength = 2;
			
		var acReturnLocationsHandler = function(sType, aArgs) {
			var aData = aArgs[2];
			var id = aData[1]; // depends on where in your schema "id" is defined
			// alert("id="+id);
			$("objHiddenReturnLocation").value = id;
		};
		
		acReturnLocations.itemSelectEvent.subscribe(acReturnLocationsHandler);
	}
	
	//
	//
	//
	if ($('frmReservation')) {
		// An XHR DataSource
		var schemaPatron = ["ResultSet.Result", "Name", "ID"];
		var dsPatrons = new YAHOO.widget.DS_XHR('index.asp', schemaPatron);
		dsPatrons.responseType = YAHOO.widget.DS_XHR.TYPE_JSON; 
		dsPatrons.queryMatchContains = true;
		// dsPatrons.scriptQueryParam = "Action";
		dsPatrons.scriptQueryAppend = "Action=JSONPatrons";
			
		var acPatrons = new YAHOO.widget.AutoComplete("inpPatron","acPatronContainer", dsPatrons);
		acPatrons.animVert = false; 
		// acPatrons.delimChar = ",";
		// acPatrons.typeAhead = true;
		acPatrons.forceSelection = true; 
		// acPatrons.useIFrame = true; 
		acPatrons.maxResultsDisplayed = 20; 
		acPatrons.minQueryLength = 2;
		acPatrons.queryDelay = 0.4;
			
		var acPatronsHandler = function(sType, aArgs) {
			var aData = aArgs[2];
			var id = aData[1]; // depends on where in your schema "id" is defined
			// alert("id="+id);
			$("idHiddenPatron").value = id;
		};
		
		acPatrons.itemSelectEvent.subscribe(acPatronsHandler);
	}

	/* autocomplete for reservation av codes */

	if ($('frmReservation') || $('frmAssignEquipment')) {
		// An XHR DataSource
		var schemaEquipment = ["ResultSet.Result", "AVCode", "ShortName", "Make", "Model", "ID", "SerialNumber"];
		var dsEquipment = new YAHOO.widget.DS_XHR('index.asp', schemaEquipment);
		dsEquipment.responseType = YAHOO.widget.DS_XHR.TYPE_JSON; 
		dsEquipment.queryMatchContains = true;
		// dsEquipment.scriptQueryParam = "Action";
		dsEquipment.scriptQueryAppend = "Action=JSONEquipment";

		var acEquipment = new YAHOO.widget.AutoComplete("fldNewAVCodes","acReservationAVCodesContainer", dsEquipment);
		acEquipment.animVert = false; 
		acEquipment.delimChar = ",";
		// acEquipment.typeAhead = true;
		acEquipment.forceSelection = false; 
		// acEquipment.useIFrame = true; 
		acEquipment.maxResultsDisplayed = 150; 
		acEquipment.minQueryLength = 2;

		// alert('aaa');

		var selectedEquipmentHandler = function(sType, aArgs) {
			// return;
			var aResultItem = aArgs[2];
			var attAVCode = aResultItem[0];
			var attTypeName = aResultItem[1]; 
			var attMake = aResultItem[2];
			var attModel = aResultItem[3];
			var attSerial = aResultItem[5];
		
			if (attAVCode == "") {
				attAVCode = attTypeName + ": " + attMake + " " + attModel + " " + attSerial;
			}
			var id = aResultItem[4]; // depends on where in your schema "id" is defined
			// alert("id="+id);
			$("idEquipmentBadges").innerHTML = $("idEquipmentBadges").innerHTML + "<span class='cButton sprite-cross'><input type=hidden name=hiddenEquipmentID value=" + id + ">" + attAVCode + "</span> ";

			$("fldNewAVCodes").value = '';
		};

		acEquipment.itemSelectEvent.subscribe(selectedEquipmentHandler);
		
		// This function returns markup that bolds the original query,
		// and also displays to additional pieces of supplemental data.
		acEquipment.formatResult = function(aResultItem, sQuery) {
		   var attAVCode = aResultItem[0]; // the entire result key
		
		   // some other piece of data defined by schema
		   var attTypeName = aResultItem[1]; 
		   var attMake = aResultItem[2];
		   var attModel = aResultItem[3];
		   var attSerial = aResultItem[5];
		
		   var aMarkup = ["<div id='ysearchresult'>",
		      attAVCode,
		      " (",
		      attTypeName,
		      "): ",
		      attMake,
		      " ",
		      attModel,
			  " ",
			  attSerial,
		      "</div>"];
			return (aMarkup.join(""));
		};

	}

	if (top.location != location) {
    	top.location.href = document.location.href ;
	}
	
};		

// new 2009-11-10
// remove Equipment Badge by removing the element that was clicked
//
var onEquipmentClick = function (event, matchedEl, container) {
	matchedEl.parentNode.removeChild(matchedEl);
};
// assign the above function to all badges that appear in this idEquipmentBadges container 
$E.delegate("idEquipmentBadges", "click", onEquipmentClick, "span"); 
	
//
//
//
function clickedEmailLink(email, dates) {
	$('fldMailTo').value = email;
	$('fldMailSubject').value = 'Your AV request for ' + dates;
	panel_seven.show();
	$('fldMailMessage').focus();
	return false;
}
			
function clickedClickyEmailLink(patronID) {
	var clickyEmailEl = $('email'+patronID);
	var clickyEmailValue = $$('cV','',clickyEmailEl)[0].innerHTML;
	$('fldMailTo').value = clickyEmailValue;
	$('fldMailSubject').value = '';
	$('fldMailMessage').value = '';
	panel_seven.show();
	$('fldMailMessage').focus();
	return false;
}

$E.addListener(window,'load',YAHOO.avs.panels);

//
//
//

/*
function checkdate(objName) {
	var datefield = objName;
	if (chkdate(objName) == false) {
		datefield.select();
		alert("That date is invalid.  Please try again.");
		datefield.focus();
		return false;
	} else {
		return true;
	}
}

function chkdate(objName) {
	var strDatestyle = "US"; //United States date style
	//var strDatestyle = "EU";  //European date style
	var strDate;
	var strDateArray;
	var strDay;
	var strMonth;
	var strYear;
	var intday;
	var intMonth;
	var intYear;
	var booFound = false;
	var datefield = objName;
	var strSeparatorArray = new Array("-"," ","/",".");
	var intElementNr;
	var err = 0;
	var strMonthArray = new Array(12);
	strMonthArray[0] = "Jan";
	strMonthArray[1] = "Feb";
	strMonthArray[2] = "Mar";
	strMonthArray[3] = "Apr";
	strMonthArray[4] = "May";
	strMonthArray[5] = "Jun";
	strMonthArray[6] = "Jul";
	strMonthArray[7] = "Aug";
	strMonthArray[8] = "Sep";
	strMonthArray[9] = "Oct";
	strMonthArray[10] = "Nov";
	strMonthArray[11] = "Dec";
	strDate = datefield.value;
	if (strDate.length < 1) {
		return true;
	}
	for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
		if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
			strDateArray = strDate.split(strSeparatorArray[intElementNr]);
			if (strDateArray.length != 3) {
				err = 1;
				return false;
			} else {
				strDay = strDateArray[0];
				strMonth = strDateArray[1];
				strYear = strDateArray[2];
			}
			booFound = true;
		}
	}
	if (booFound == false) {
		if (strDate.length>5) {
			strDay = strDate.substr(0, 2);
			strMonth = strDate.substr(2, 2);
			strYear = strDate.substr(4);
		}
	}
	if (strYear.length == 2) {
		strYear = '20' + strYear;
	}
	// US style
	if (strDatestyle == "US") {
		strTemp = strDay;
		strDay = strMonth;
		strMonth = strTemp;
	}
	intday = parseInt(strDay, 10);
	if (isNaN(intday)) {
		err = 2;
		return false;
	}
	intMonth = parseInt(strMonth, 10);
	if (isNaN(intMonth)) {
		for (i = 0;i<12;i++) {
			if (strMonth.toUpperCase() == strMonthArray[i].toUpperCase()) {
				intMonth = i+1;
				strMonth = strMonthArray[i];
				i = 12;
			}
		}
		if (isNaN(intMonth)) {
			err = 3;
			return false;
		}
	}
	intYear = parseInt(strYear, 10);
	if (isNaN(intYear)) {
		err = 4;
		return false;
	}
	if (intMonth>12 || intMonth<1) {
		err = 5;
		return false;
	}
	if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1)) {
		err = 6;
		return false;
	}
	if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) {
		err = 7;
		return false;
	}
	if (intMonth == 2) {
		if (intday < 1) {
			err = 8;
			return false;
		}
		if (LeapYear(intYear) == true) {
			if (intday > 29) {
				err = 9;
				return false;
			}
		} else {
			if (intday > 28) {
				err = 10;
				return false;
			}
		}
	}
	if (strDatestyle == "US") {
		datefield.value = strMonthArray[intMonth-1] + " " + intday+" " + strYear;
	} else {
		datefield.value = intday + " " + strMonthArray[intMonth-1] + " " + strYear;
	}
	return true;
}

function LeapYear(intYear) {
	if (intYear % 100 == 0) {
		if (intYear % 400 == 0) {
			return true;
		}
	} else {
		if ((intYear % 4) == 0) {
			return true;
		}
	}
	return false;
}

function doDateCheck(from, to) {
	if (Date.parse(from.value) <= Date.parse(to.value)) {
		alert("The dates are valid.");
	} else {
		if (from.value == "" || to.value == "") {
			alert("Both dates must be entered.");
		} else { 
			alert("To date must occur after the from date.");
		}
	}
}
*/
/*
function CalDate(element) {
	this.element = element;
}	
*/

//
// from davglass YAHOO.Tools
//
function getHeight(elm) {
    elm = $(elm);
    var h = $D.getStyle(elm, 'height');
    if (h == 'auto') {
        elm.style.zoom = 1;
        h = elm.clientHeight + 'px';
    }
    return h;
}

//
//
//
var calActivities = {
	over_cal: false,
	oCalendar: null,
	element: 'calActivities',
	container: 'calActivitiesContainer',
	target: 'cal1Date',
	initialize: function () {
		calActivities.oCalendar = new YAHOO.widget.Calendar(calActivities.element, calActivities.container);
		calActivities.oCalendar.selectEvent.subscribe(calActivities.getDateX, calActivities.oCalendar, true);
		$E.addListener(calActivities.target, 'focus', calActivities.show);
		$E.addListener(calActivities.target, 'blur', calActivities.hide);
		calActivities.oCalendar.render();
		$E.addListener(calActivities.container, 'mouseover', calActivities.mouseOver);
		$E.addListener(calActivities.container, 'mouseout', calActivities.mouseOut);
	},
	getDateX: function () {
		var calDate = this.getSelectedDates()[0];
		calDate = (calDate.getMonth() + 1) + '/' + calDate.getDate() + '/' + calDate.getFullYear();
		$(calActivities.target).value = calDate;
		calActivities.over_cal = false;
		calActivities.hide();
	},
	show: function () {
		var xy = $D.getXY(calActivities.target);
		$D.setStyle(calActivities.container, 'display', 'block');
		xy[1] = xy[1] + parseInt(getHeight(calActivities.target), 10) + 3;
		$D.setXY(calActivities.container, xy);
	},
	hide: function () {
		if (!calActivities.over_cal) { $D.setStyle(calActivities.container, 'display', 'none'); }
	},
	mouseOver: function () { calActivities.over_cal = true; },
	mouseOut: function () { calActivities.over_cal = false; }
};

$E.addListener(window, 'load', calActivities.initialize);

//
//
//
var calDelivery = {
	over_cal: false,
	oCalendar: null,
	element: 'calDelivery',
	container: 'calDeliveryContainer',
	target: 'fldDeliveryDate',
	initialize: function () {
		calDelivery.oCalendar = new YAHOO.widget.Calendar(calDelivery.element, calDelivery.container);
		calDelivery.oCalendar.selectEvent.subscribe(calDelivery.getDateX, calDelivery.oCalendar, true);
		$E.addListener(calDelivery.target, 'focus', calDelivery.show);
		$E.addListener(calDelivery.target, 'blur', calDelivery.hide);
		calDelivery.oCalendar.render();
		$E.addListener(calDelivery.container, 'mouseover', calDelivery.mouseOver);
		$E.addListener(calDelivery.container, 'mouseout', calDelivery.mouseOut);
	},
	getDateX: function () {
		var calDate = this.getSelectedDates()[0];
		calDate = (calDate.getMonth() + 1) + '/' + calDate.getDate() + '/' + calDate.getFullYear();
		$(calDelivery.target).value = calDate;
		calDelivery.over_cal = false;
		calDelivery.hide();
	},
	show: function () {
		var xy = $D.getXY(calDelivery.target);
		$D.setStyle(calDelivery.container, 'display', 'block');
		xy[1] = xy[1] + parseInt(getHeight(calDelivery.target)) + 3;
		$D.setXY(calDelivery.container, xy);
	},
	hide: function () {
		if (!calDelivery.over_cal) { $D.setStyle(calDelivery.container, 'display', 'none'); }
	},
	mouseOver: function () { calDelivery.over_cal = true; },
	mouseOut: function () { calDelivery.over_cal = false; }
}

$E.addListener(window, 'load', calDelivery.initialize);

//
//
//
var calReturn = {
	over_cal: false,
	oCalendar: null,
	element: 'calReturn',
	container: 'calReturnContainer',
	target: 'fldReturnDate',
	initialize: function () {
		calReturn.oCalendar = new YAHOO.widget.Calendar(calReturn.element, calReturn.container);
		calReturn.oCalendar.selectEvent.subscribe(calReturn.getDateX, calReturn.oCalendar, true);
		$E.addListener(calReturn.target, 'focus', calReturn.show);
		$E.addListener(calReturn.target, 'blur', calReturn.hide);
		calReturn.oCalendar.render();
		$E.addListener(calReturn.container, 'mouseover', calReturn.mouseOver);
		$E.addListener(calReturn.container, 'mouseout', calReturn.mouseOut);
	},
	getDateX: function () {
		var calDate = this.getSelectedDates()[0];
		calDate = (calDate.getMonth() + 1) + '/' + calDate.getDate() + '/' + calDate.getFullYear();
		$(calReturn.target).value = calDate;
		calReturn.over_cal = false;
		calReturn.hide();
	},
	show: function () {
		var xy = $D.getXY(calReturn.target);
		$D.setStyle(calReturn.container, 'display', 'block');
		xy[1] = xy[1] + parseInt(getHeight(calReturn.target)) + 3;
		$D.setXY(calReturn.container, xy);
	},
	hide: function () {
		if (!calReturn.over_cal) { $D.setStyle(calReturn.container, 'display', 'none'); }
	},
	mouseOver: function () { calReturn.over_cal = true; },
	mouseOut: function () { calReturn.over_cal = false; }
}

$E.addListener(window, 'load', calReturn.initialize);
	
	
//
//
// used by Video section
function ChangeMediaType(ID)
{
	window.location.replace("index.asp?Action=ChangeMediaType&MediaID=" + ID + "&MediaTypeID=" + $("selMediaTypeID" + ID).value);
}

//
// Manage Equipment Type
//
YAHOO.util.Event.addListener(window, "load", function() {
	
	// only process if Equipment Type ID exists
	if ($('idEquipmentDataTable')) {
	
		// YAHOO.example.XHR_JSON = new function() {
		YAHOO.avs.ManageEquipmentType = new function() {

			// not used, keep as example of Parser. Might need to get rid of "12/31/1969" problem
			YAHOO.util.DataSource.Parser['sqlDate'] = function (oData) {
				var parts = oData.split(' ');
				var datePart = parts[0].split('-');
				if (parts.length > 1) {
					var timePart = parts[1].split(':');
					return new Date(datePart[0],datePart[1]-1,datePart[2],timePart[0],timePart[1],timePart[2]);
				} else {
					return new Date(datePart[0],datePart[1]-1,datePart[2]);
				}
			};

			// receive Equipment Type ID from the HTML page
			var lngEquipmentTypeID = $('lngEquipmentTypeID').value;
			
			// my Editor, sends new value to database via POST
			var myEditor = new YAHOO.widget.TextboxCellEditor({
				asyncSubmitter: function (callback, newValue) {
					var record = this.getRecord(),
						column = this.getColumn(),
						oldValue = this.value,
						datatable = this.getDataTable();
					YAHOO.util.Connect.asyncRequest(
						'POST',
						'index.asp?Action=UpdateDataTableCell', 
						{
							success:function(o) {
								var r = YAHOO.lang.JSON.parse(o.responseText);
								if (r.replyCode == 201) {
									callback(true, r.data);
								} else {
									alert(r.replyText);
									callback();
								}
							},
							failure:function(o) {
								alert(o.statusText);
								callback();
							},
							scope:this
						},
						'Table=Equipment&Field=' + column.key + '&NewValue=' + 
							escape(newValue) + '&OldValue=' + escape(oldValue) + 
							myBuildUrl(datatable, record)
					);                                              
				}
			})
			
			// creates the Details link with the magnifying glass
			this.formatUrl = function(elCell, oRecord, oColumn, sData) {
				elCell.innerHTML = "<a class='cButton sprite-magnifier' href='index.asp?Action=ManageEquipment&ID=" + oRecord.getData("ID") + "'>Details</a>";
			};

			// creates the tick mark or cross for a Boolean field
			this.formatBoolean = function(elCell, oRecord, oColumn, sData) {
				// sData = 0 for False
				// sData = 1 for True
				if (sData == 0) {
					$D.removeClass(elCell, "clsDTBoolean-True");
					$D.addClass(elCell, "clsDTBoolean-False");
				} else {
					$D.removeClass(elCell, "clsDTBoolean-False");
					$D.addClass(elCell, "clsDTBoolean-True");
				}
			};

			var myColumnDefs = [
				// isPrimaryKey - extension
				// action - extension
				{ key:"ID", isPrimaryKey: true, hidden: true },
				{ key:"InCirculation", label: "In Circulation", sortable: true, action: "FlipBoolean", editor: myEditor, className: "clsDTBoolean", formatter: this.formatBoolean },
				{ key:"AVCode", label: "AV Code", sortable: true, editor: myEditor },
				{ key:"Make", sortable: true, editor: myEditor },
				{ key:"Model", sortable: true, editor: myEditor },
				{ key:"SerialNumber", label: "Serial Number", sortable: true, editor: myEditor },
				{ key:"Location", sortable: true, editor: myEditor },
				{ key:"DateChecked", label: "Date Checked", sortable: true, editor: myEditor, formatter: YAHOO.widget.DataTable.formatDate, editor: new YAHOO.widget.DateCellEditor() },
				{ key:"Link", label: "", action: "Hyperlink", formatter: this.formatUrl }
			];
			
			// configuration values for Datatable
			// creates the paginated version
			var myConfigs = { 
				// sortedBy:{key:"areacode",dir:"asc"}, 
				paginator: new YAHOO.widget.Paginator({ 
					rowsPerPage: 25, 
					template: YAHOO.widget.Paginator.TEMPLATE_ROWS_PER_PAGE, 
					rowsPerPageOptions: [10,25,50,100], 
					pageLinks: 5 
				}), 
				draggableColumns: true,
				initialRequest: "Action=JSONEquipmentType&TypeID=" + lngEquipmentTypeID
			}
 
			this.myDataSource = new YAHOO.util.DataSource("index.asp?");
			this.myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
			this.myDataSource.connXhrMode = "queueRequests";
			this.myDataSource.responseSchema = {
				resultsList: "ResultSet.Result",
				fields: [ "ID", "InCirculation", "Location", { key: "DateChecked", parser: "date" }, "AVCode", "ShortName", "Make", "Model", "SerialNumber" ]
			};

			// Create the DataTable!
			this.myDataTable = new YAHOO.widget.DataTable("idEquipmentDataTable", myColumnDefs,
				this.myDataSource, myConfigs);

			// finds the primary key
			var myBuildUrl = function(datatable, record) {
				var url = '';
				var cols = datatable.getColumnSet().keys;
				for (var i = 0; i < cols.length; i++) {
					if (cols[i].isPrimaryKey) {
						url += '&' + cols[i].key + '=' + escape(record.getData(cols[i].key));
					}
				}
				return url;
			};

			// process click anywhere in table data
			var onCellClick = function(oArgs) {
				var target = oArgs.target,
					column = this.getColumn(target),
					record = this.getRecord(target);
					value = record.getData(column.key);
				switch (column.action) {
					case 'delete':
						break; // not using delete right now
						if (confirm('Are you sure?')) {
							
							YAHOO.util.Connect.asyncRequest(
								'GET',
								'index.asp?Action=dtDelete' + myBuildUrl(this,record),
								{
									success: function (o) {
										if (o.responseText == 'Ok') {
											this.deleteRow(target);
										} else {
											alert(o.responseText);
										}
									},
									failure: function (o) {
										alert(o.statusText);
									},
									scope:this
								}
							);
						}
						break;
					case 'FlipBoolean':
						YAHOO.util.Connect.asyncRequest(
							'POST',
							'index.asp?Action=UpdateDataTableCell', 
							{
								success:function(o) {
									var r = YAHOO.lang.JSON.parse(o.responseText);
									if (r.replyCode == 201) {
										this.updateCell(record, column, 1 - value);
									} else {
										alert(r.replyText);
									}
								},
								failure:function(o) {
									alert(o.statusText);
								},
								scope:this
							},
							'Table=Equipment&Field=' + column.key + '&NewValue=' + 
								escape(1-value) + '&OldValue=' + escape(value) + 
								myBuildUrl(this, record)
						);
						break;
					default:
						this.onEventShowCellEditor(oArgs);
						break;
				}
			};

			// subscribe to onCellClick
			this.myDataTable.subscribe('cellClickEvent', onCellClick);
				
		};
	};

});

// the end!