var glbLocalContextRoot = glbSiteRoot + "admin/";
var glbImageRoot = glbSiteRoot + "images/";
var glbBaseCurrency = "GBP";

var tmrGeneric;
var glbDateField;
var glbFileField;
var glbHideMenuElem = null;
var glbTimeLastClear = 0;

function BodyLoadHandler(e) {
	try {
		List_OnPageLoad();
	} catch (err) {}
	
	try {
		Page_BodyLoad(e);
	} catch (err) {}
}

function BodyResizeHandler(e) {
	try {
		ResizeScrollingLists();
	}
	catch(err) {}
	
	try {
		Page_BodyResize(e);
	} catch (err) {}
}


function BodyKeyUpHandler(e) {
	try {
		Page_BodyKeyUp(e);
	} catch (err) {}
}

function BodyUnloadHandler(e) {
	try {
		Page_BodyUnload(e);
	} catch (err) {}
}

function BodyKeyDownHandler(e) {
	try {
		var k = e.which;
		if (!k) k = e.keyCode;
		if (e.ctrlKey && e.altKey) {
			switch (k) {
				case 222:				
					Delay_Goto(glbSiteRoot + "dashboard/index.asp");
					return KillKeyPress(e);			
			}
		}

		// System-wide handling of F1
		if (k ==112) {
			try {
				e.preventDefault();

				e.stopPropagation();
				e.returnValue = false;
				HelpHandler(e);
			}

			catch (err) {}
			return false;
		}

		Page_BodyKeyDown(e);
	} catch (err) {}
}

// ! TEXT FUNCTIONS


// Age-old text capitalisation function 
function CapitaliseSentences(fd) {
	if (fd.value) {
		fd.value = CapitaliseSentencesInText(fd.value);
	}
}

function CapitaliseSentencesInText(strText) {
	if (strText == strText.toLowerCase()) {
		var newstr = "";
		var mode = 1;
		for (var l=0; l < strText.length; l++) {
			var c = strText.substr(l,1);

			switch (mode) {
				case 0:
					newstr += c.toLowerCase();
					break;
				case 1:
					newstr += c.toUpperCase();
					break;
				case 2:
					newstr +=c;
					break;
			}
			switch (c) {
				case " ":
					break;
				case ".":
					var nc = strText.substr(l+1,1);
					if (nc == " ") {
						mode=1;
					}
					break;
				case "'":
					mode = 0;
					if (l>0) {
						if (newstr.substr(l-1,1) == "O") mode=1;							
					}
					break;
				case "c":
					mode = 0;
					if (l>0) {
						if (newstr.substr(l-1,1) == "M") {
							mode = 2;
						} else {
							if (l>1) {
								if (newstr.substr(l-2,2) == "Ma") {
									mode = 2;
								}
							}
						}

					}
					break;
				default:
					mode = 0;
			}
		}

		return newstr;
	} else {
		return strText;
	}
}

function CapitaliseText(fd, bNoTrim) {
	try {
		if (fd.value && fd.value.indexOf("://") == -1 && fd.value.indexOf("www.") == -1 && fd.value.indexOf("skype:") == -1) {
			if (!bNoTrim) fd.value = Trim(fd.value);
			if (fd.value == fd.value.toLowerCase()) {
				var newstr = "";
				var mode = 1;

				for (var l=0; l<fd.value.length; l++) {
					var c = fd.value.substr(l,1);

					switch (mode) {
						case 0:
							newstr += c.toLowerCase();
							break;
						case 1:
							newstr += c.toUpperCase();
							break;
						case 2:
							newstr +=c;
							break;
					}


					mode = 0;
					switch (c) {
						case " ":
							mode=1;
							break;
						case "'":
							if (l>0) {
								if (newstr.substr(l-1,1) == "O") mode=1;							
							}
							break;
						case "c":
							if (l>0) {
								if (newstr.substr(l-1,1) == "M") {
									mode = 2;
								} else {
									if (l>1) {
										if (newstr.substr(l-2,2) == "Ma") {
											mode = 2;
										}
									}
								}

							}
							break;
						case "z":
							if (l>2) {
								if (newstr.substr(l-3,3) == "Fitz") mode=2;
							}
							break;
					}
				}

				fd.value = newstr;
				fd.onchange();
			}
		}			
	} catch (err) {}
}

function XSetInitials(srcfield, destfield) {
	var UFlag = 1;
	var vSrc = srcfield.value;
	var vDest = "";
	for (var n=0; n < vSrc.length; n++) {
		switch (vSrc.substr(n,1)) {
			case " ":
				UFlag=1;
				break;
			default:
				if (UFlag) {
					UFlag=0;
					vDest += vSrc.substr(n,1);					
				}
				break;			
		}
	}
	destfield.value = vDest.toUpperCase();
}
function ValidateEmail(text) {
	var p = text.indexOf("@");
	if (p != -1) p = text.indexOf(".",p);
	if (p == -1)
		return false;
	else
		return true;
}

function TextToWeekday(x) {
	switch (x.toLowerCase()) {
		case "mon":
		case "monday":
			return 1;
		case "tue":
		case "tuesday":
			return 2;
		case "wed":
		case "wednesday":
			return 3;
		case "thu":
		case "thursday":
			return 4;
		case "fri":
		case "friday":
			return 5;
		case "sat":
		case "saturday":
			return 6;
		case "sun":
		case "sunday":
			return 7;
		default:
			return -1;
	}
}

function CheckDate(testdate, md) {
	if (testdate.value == "") return 0;
	
	// See if the date is next or last x
	var today = new Date();
	var iToday = today.getDay();
	if (testdate.value.indexOf("next ") == 0) {
		var iDay = TextToWeekday(testdate.value.substr(5));
		if (iDay == -1) return false;
		
		// Calculate
		var t = new Date(today.valueOf() + ((7 + iDay - iToday) * 86400000));						
		testdate.value = GetFormattedDateFromValues(t.getDate(), t.getMonth()+1, t.getFullYear());
		return true;
	
	}
	if (testdate.value.indexOf("last ") == 0) {
		var iDay = TextToWeekday(testdate.value.substr(5));
		if (iDay == -1) return false;
		
		// Calculate
		var t = new Date(today.valueOf() + ((-7 + iDay - iToday) * 86400000));						
		testdate.value = GetFormattedDateFromValues(t.getDate(), t.getMonth()+1, t.getFullYear());
		return true;
	}
	
	// May just be weekday
	var iDay = TextToWeekday(testdate.value);
	if (iDay != -1) {
		var t = new Date(today.valueOf() + ((iDay - iToday) * 86400000));						
		testdate.value = GetFormattedDateFromValues(t.getDate(), t.getMonth()+1, t.getFullYear());
	}
	
	
	var parseit = testdate.value.split("/");
	var day =1, month, year;
	if (parseit.length<2) {
		if (testdate.value.substr(0,1) != "-") parseit = testdate.value.split("-");
		if (parseit.length<2) {
			parseit = testdate.value.split(".");
			if (parseit.length<2) {
				if (testdate.value.length == 6) {
					parseit = new Array(testdate.value.substr(0,2),testdate.value.substr(2,2),testdate.value.substr(4,2));
				} else if (testdate.value.length == 8) {
					parseit = new Array(testdate.value.substr(0,2),testdate.value.substr(2,2),testdate.value.substr(4,4));
				} else {
					// May be abbreviation or number of days
					var t = new Date(), add;
					switch (testdate.value.toLowerCase()) {
						case 't':
						case 'today':
							break;
						case 'y':
						case 'yesterday':
							t = new Date(t.valueOf() - 86400000);						
							break;
						case 'm':
						case 'tomorrow':
							t = new Date(t.valueOf() + 86400000);						
							break;						
						default: {
							switch (testdate.value.substr(0,1)) {
								case '+':
									add = Zval(testdate.value.substr(1));
									t = new Date(t.valueOf() + (add * 86400000));						
									break;									
								case '-':
									add = Zval(testdate.value.substr(1));
									t = new Date(t.valueOf() - (add * 86400000));						
									break;
								default:
									return 0;
							}
						}
					}
					parseit = new Array(2);
					switch (glbLanguage) {
						case 'en-us':
							parseit[1] = t.getDate();
							parseit[0] = t.getMonth()+1;
							break;
						default:
							parseit[0] = t.getDate();
							parseit[1] = t.getMonth()+1;
							break;
					}
					parseit[2] = t.getFullYear();
				}
			}
		}
	}


	if (parseit.length == 2) {
		if (md == 1) return 0;
		switch (glbLanguage) {
			case 'en-us':
				day = parseInt(parseit[1],10);
				month = parseInt(parseit[0],10);
				break;
			default:
				day = parseInt(parseit[0],10);
				month = parseInt(parseit[1],10);
				break;
		}
		var dt = new Date();
		year = dt.getFullYear();
	} else {
		switch (glbLanguage) {
			case 'en-us':
				day = parseInt(parseit[1],10);
				month = parseInt(parseit[0],10);
				break;
			default:
				day = parseInt(parseit[0],10);
				month = parseInt(parseit[1],10);
				break;
		}
		year = parseInt(parseit[2],10);

		if (day > 1000) {
			var t = day;
			day = year;
			year = t;
		} else if (month > 1000) {
			var t = day;
			day = year;
			year = month;
			month = t;
		}
	}
	if (month<1 || month>12) return 0;
	if (day<1 || day>31) return 0;
	if (year<100) {
		if (year<10)
			year += 2000;
		else
			year += 1900;
	}
	if (isNaN(day) || isNaN(month) || isNaN(year)) return 0;

	// Check end of month - already done those with 31 days
	switch (month) {
		case 4:
		case 6:
		case 9:
		case 11:
			if (day > 30) return 0;
			break;
		case 2:
			if (day > 28) {
				// Slight cheat for the sake of simplicity...
				if (year % 4 !=0) return 0;
			}
			break;
	}
	testdate.value = GetFormattedDateFromValues(day, month, year);
	return 1;
}

function GetFormattedDateFromValues(day, month, year) {
	switch (glbLanguage) {
		case 'en-us':
			return month + "/" + day + "/"+year;
		default:
			return day + "/" + month + "/"+year;
	}
}

function ValidateDate(fd,md) {
	var ok = CheckDate(fd,md);
	if (ok) {
		fd.style.backgroundColor = "";
		fd.style.color = "";
	} else {
		if (fd.value.length == 0) {
			fd.style.backgroundColor = "";
			fd.style.color = "";
		} else {
			fd.style.backgroundColor = "#FF0000";
			fd.style.color = "#FFFFFF";
		}
	}
	return ok;
}

function IsBlank(fd) {
	if (fd.value == "")
		return true;
	else
		return false;
}
function IsSpecific(fd) {
	var i = fd.options.selectedIndex;
	if (fd.options[i].specific == "1") 
		return true;
	else
		return false;
}
function IsSpecificWithArray(fd,arrX) {
	var i = fd.options.selectedIndex;
	if (i == -1) return false;
	var v = fd.options[i].value;
	for (i=0;i<arrX.length;i++) {
		if (v = arrX[i]) return true;
	}
	return false;
}
function CapitaliseAddress(fd) {
	if (CheckPostcode(fd)) {
		document.getElementById("postcode").value = fd.value;
		fd.value = "";
		// Look for town
		if (document.getElementById("addresstown").value == "") {
			for (var i=3;i!=1;i--) {
				if (document.getElementById("address" + i).value != "") {
					document.getElementById("addresstown").value = document.getElementById("address" + i).value;
					document.getElementById("address" + i).value = "";
					i = 2;
				}
			}
		}
	} else {
		return CapitaliseText(fd);
	}
}
function c_is_numeric(x) {
	if (x>='0' && x<='9') return 1; else return 0;
}
function c_is_alphabetic(x) {
	if ((x>='A' && x<='Z') || (x>='a' && x<='z')) return 1; else return 0;
}
function CheckPostcode(fd) {
	if (fd.value) {
		fd.value = fd.value.toUpperCase();

		// Trim all spaces
		var pc = "";
		for (var n=0;n<fd.value.length;n++) {
			var tc = fd.value.substr(n,1);
			if ( c_is_alphabetic(tc) || c_is_numeric(tc) ) {
				pc += tc;
			} else {
				if (tc!=' ') {
					return 0;
				}
			}
		}
		var l = pc.length;
		if (l<5 || l>7) {
			return 0;
		}

		// Check last three characters
		if (!c_is_alphabetic(pc.substr(l-1,1))) return 0;			
		if (!c_is_alphabetic(pc.substr(l-2,1))) return 0;			
		if (!c_is_numeric(pc.substr(l-3,1))) return 0;			
		if (!c_is_alphabetic(pc.substr(0,1))) return 0;			

		pc = pc.substr(0,l-3) + " " + pc.substr(l-3,3);
		fd.value = pc;			
		return 1;
	}			
	return 0;
}

function ValidatePostcode(fd) {
	var ok = CheckPostcode(fd);
	if (ok) {
		fd.style.backgroundColor = "";
		fd.style.color = "";
	} else {
		if (fd.value.length == 0) {
			fd.style.backgroundColor = "";
			fd.style.color = "";
		} else {
			fd.style.backgroundColor = "#FF0000";
			fd.style.color = "#FFFFFF";
		}
	}
	return ok;
}

function Xval(x, AllowStartWithNonAlpha) {
	var v = 0;
	var m = 0;
	var f = 1;
	var g = 0;
	for (var i=0;i<x.length;i++) {
		var c = x.substr(i,1);
		switch (c) {
			case ' ':
			case '\240':
				break;

			case '-':
				if (g) return 0;
				g++;
				f = -1;
				break;

			case ',':	
				g++;
				break;

			case '.':
				if (m) return 0;
				g++;
				m=10;
				break;

			case '0':
			case '1':
			case '2':
			case '3':
			case '4':
			case '5':
			case '6':
			case '7':
			case '8':
			case '9':
				g++;
				if (!m) {
					v = v * 10;
					v = v + parseInt(c);
				} else {
					v = v + (parseInt(c) / m);
					m = m * 10;
				}
				break;
			default:
				if (g || !AllowStartWithNonAlpha) return 0;
				break;
		}
	}
	return v * f;	
}

function Zval(x, md) {
	var v = Xval(x, md);
	if (isNaN(v)) return 0;
	if (v <= 0) return 0;
	return v;
}

function GetComboNumericValue(fd) {
	return Zval(GetComboValue(fd));
}

function GetComboValue(fd) {
	if (fd.selectedIndex == -1)  {
		return "";
	} else {
		return fd.options[fd.selectedIndex].value;
	}
}


function ZZ(x) {
	if (x < 10) 
		return "0" + x;
	else
		return x;
}

function CheckTime(fd) {
	// Split into two parts
	var x = fd.value;
	
	// Watch for am/pm
	var lAMPM = 0;
	if (x.length >= 3) {
		if (x.indexOf("am") == x.length - 2) {
			lAMPM = 1;
			x = x.substr(0,x.length-2);
		} else if (x.indexOf("pm") == x.length - 2) {
			lAMPM = 2;
			x = x.substr(0,x.length-2);
		} else {
			// No AM/PM
		}
	}
	
	var parseit = x.split(":");
	if (parseit.length!=2)	parseit = x.split(".");
	if (parseit.length!=2)	parseit = x.split("-");

	// Allow entry of hour only
	if (parseit.length == 1) {
		var x = parseit[0];
		parseit = new Array(2);
		parseit[0] = x;
		parseit[1] = 0;
	}
	if (parseit.length!=2) return false;

	// Check that the parts are consistent
	var h = Zval(parseit[0]);
	if (isNaN(h)) return false;

	// Adjust hour based in lAMPM
	if (h < 12) {
		switch (lAMPM) {
			case 0:
				if (h < 7 && parseit[0].length == 1) h+=12;	
				break;
			case 1:
				// Already AM
				break;
			case 2:
				h+=12;
		}
	}
	// Adjust hour if not probable, and not explicitly specified
	var m = Zval(parseit[1]);
	if (isNaN(m)) return false;
	if (h<0 || h>23) return false;
	if (m<0 || m >59) return false;
	fd.value = ZZ(h) + ":" + ZZ(m);
	return true;
}
function ValidateTime(fd) {
	var ok = CheckTime(fd);
	if (ok) {
		fd.style.backgroundColor = "";
		fd.style.color = "";
	} else {
		if (fd.value.length == 0) {
			fd.style.backgroundColor = "";
			fd.style.color = "";
		} else {
			fd.style.backgroundColor = "#FF0000";
			fd.style.color = "#FFFFFF";
		}
	}
	return ok;
}
function CheckNINumber(fd) {
	if (fd.value) {
		fd.value = fd.value.toUpperCase();
		if (fd.value.length == 9) {
			if (!c_is_alphabetic(fd.value.substr(0,1))) return false;
			if (!c_is_alphabetic(fd.value.substr(1,1))) return false;
			for (var i =2; i < 8; i++) {
				if (!c_is_numeric(fd.value.substr(i,1))) return false;
			}
			if (!c_is_alphabetic(fd.value.substr(8,1))) return false;
			return true;
		}
	}
}
function ValidateNINumber(fd) {
	var ok = CheckNINumber(fd);
	if (ok) {
		fd.style.backgroundColor = "";
		fd.style.color = "";
	} else {
		if (fd.value.length == 0) {
			fd.style.backgroundColor = "";
			fd.style.color = "";
		} else {
			fd.style.backgroundColor = "#FF0000";
			fd.style.color = "#FFFFFF";
		}
	}
	return ok;
}

function ValidateCardDate(f,bForExpiry) {
	var v = f.value;
	if (!v) return false;
	var r = CheckCardDate(v,bForExpiry);
	if (r=="") {
		f.style.backgroundColor = "#FF0000";
		f.style.color = "#FFFFFF";
		f.style.fontWeight = "bold";
		return false;
	} else {
		f.style.backgroundColor = "";
		f.style.color = "";
		f.style.fontWeight = "";
		f.value = r;
		return true;
	}
}
function CheckCardDate(v, bForExpiry) {
	if (v.length ==4 && v.indexOf('/') == -1) {
		v = v.substr(0,2) + "/" + v.substr(2,2);
	}	
	var arrD = v.split("/");
	
	var bOk = false;

	if (arrD.length == 2) {
		var m = Zval(arrD[0], 10);
		var y = Zval(arrD[1], 10);
		if (m > 0 && m < 13) {
			var d = new Date();
			var thisy = d.getFullYear();
			var thism = d.getMonth() + 1;

			var testy = y;
			if (y > 50) 
				testy +=1900;
			else
				testy+= 2000;

			if (bForExpiry) {
				if (testy < thisy || (testy == thisy && m < thism)) return "";
			} else {
				if (testy > thisy || (testy == thisy && m > thism)) return "";
			}

			// Okay
			return ZZ(m) + "/" + ZZ(y);
		}
	}
	return "";
}

function NumberCommas(f) {
	var x = f.value;
	var n = Math.abs(Zval(x));
	if (!isNaN(n)) {
		var arrF = new Array(12);
		for (var i=10; i > -3; i--) {
			var iF = Math.pow(10, i);
			arrF[i+2] = Math.floor(n / iF);
			n -= (arrF[i+2] * iF);
		}
		
		var tx = "", bStart = false;
		for (var i=10; i >= 0; i--) {
			if (arrF[i+2] || bStart) {
				tx += arrF[i+2];
				if (i == 3 || i==6 || i==9 || i==12) tx += ",";
				if (arrF[i+2]) bStart = true;
			}
		}
		if (arrF[1]!=0 || arrF[0]!=0) {
			tx += "." + arrF[1] + arrF[0];
		}

		f.value = tx;
	}	

}

function ValidateAndCapitalise(fd, bNoTrim) {
	CapitaliseText(fd, bNoTrim);
	if (fd.value.length) {
		fd.style.backgroundColor = "";
		fd.style.color = "";
		return true;
	} else {
		fd.style.backgroundColor = "#FF0000";
		fd.style.color = "#FFFFFF";
		return false;
	}
}

function ValidateAndCapitaliseSentences(fd) {
	CapitaliseSentences(fd);
	if (fd.value.length) {
		fd.style.backgroundColor = "";
		fd.style.color = "";
		return true;
	} else {
		fd.style.backgroundColor = "#FF0000";
		fd.style.color = "#FFFFFF";
		return false;
	}
}


function ValidateEmailField(fd) {
	if (ValidateEmail(fd.value)) {
		fd.value = fd.value.toLowerCase();
		fd.style.backgroundColor = "";
		fd.style.color = "";
		return true;
	} else {
		fd.style.backgroundColor = "#FF0000";
		fd.style.color = "#FFFFFF";
		return false;
	}
}

function GetFormContents(f) {
	var strValueList = "";
	var strThisValue = "";
	var arrObj = f.getElementsByTagName("INPUT");
	var ctObj = arrObj.length;
	for (var iObj = 0; iObj < ctObj; iObj++) {
		// Watch for radio buttons
		if (arrObj[iObj].type != "radio" || arrObj[iObj].checked) {
			strThisValue = GetFieldValue(arrObj[iObj]);
			if (strValueList) strValueList += "&";
			strValueList += arrObj[iObj].name + "=" + PostEncode(strThisValue);
		}
	}
	arrObj = f.getElementsByTagName("TEXTAREA");
	ctObj = arrObj.length;
	for (var iObj = 0; iObj < ctObj; iObj++) {
		strThisValue = GetFieldValue(arrObj[iObj]);
		if (strValueList) strValueList += "&";
		strValueList += arrObj[iObj].name + "=" + PostEncode(strThisValue);
	}
	arrObj = f.getElementsByTagName("SELECT");
	ctObj = arrObj.length;
	for (var iObj = 0; iObj < ctObj; iObj++) {
		strThisValue = GetFieldValue(arrObj[iObj]);
		if (strValueList) strValueList += "&";
		strValueList += arrObj[iObj].name + "=" + PostEncode(strThisValue);
	}
	return strValueList;			
}

function GetRadioValue(elemname) {
	var arrE = document.getElementsByName(elemname);
	var ctE = arrE.length;
	for (var i = 0; i < ctE; i++) {
		if (arrE[i].checked) return arrE[i].value;
	}
	return "";
}

function GetFieldValue(f) {
	var strTag = f.tagName.toLowerCase();
	var strType = f.type.toLowerCase();
	if (strTag == "input" && (strType == "checkbox" || strType == "radio")) {
		return ((f.checked) ? f.value : "");
	} else if (strTag == "select") {
		var iOpt = f.selectedIndex;
		if (iOpt == -1) 
			return "";
		else
			return f.options[iOpt].value;
	} else if (strTag == "input" && strType == "button") {
		return "";
	} else {
		return f.value;
	}
}

function PostEncode(V) {
	return escape(V).replace(/[+]/g, "%2B");

}

function Trim(V) {
	var temp = V.replace(/^[\s]+/g, "");
	temp = temp.replace(/[\s]+$/g, "");
	return temp;
}

function IsValidYear(f, bAllowFuture) {
	var l = Zval(f.value);
	if (!l) return false;
	if (l < 100) {
		if (l < 10) {
			l += 2000;
		} else {
			l += 1900;
		}
		f.value = l;
	}
	if (l < 1930) return false;
	if (!bAllowFuture) {
		var d = new Date();
		if (l > d.getFullYear()) return false;
	}
	return true;
}



function SortList(context, searchid, field, refresh) {
	if (parseInt(refresh) == 1) {
		ReloadList(context + "ReorderSearch.asp?searchid=" + searchid + "&field=" + field + "&refreshonly=1");
	} else {
		document.location = context + "ReorderSearch.asp?searchid=" + searchid + "&field=" + field + "&referer=" + escape(document.location);
	}
}


// ! LISTS
var objLoadList = null;
function ReloadList(url) {
	objLoadList = CreateXMLObject();
	objLoadList.onreadystatechange = ListRefresh;
	objLoadList.open("GET", url, true);
	objLoadList.send(null);
}

function ListRefresh() {
	try {
		switch (objLoadList.readyState) {
			case 3: {
				if (objLoadList.status >= 400) {
				}
				break;
			}
			case 4: {
				if (objLoadList.status >= 400) {
				} else {
					var data = objLoadList.responseText;
					// Need to remove the first <div> tag. Do this in a nasty crude way
					var p1 = data.indexOf('>') + 1;
					var p2 = data.lastIndexOf('</div');
					data = data.substr(p1,p2-p1);
					document.getElementById("MyList").innerHTML = data;
					ResizeScrollingLists();
					document.getElementById("MyList").style.display= "";
					objLoadList = null;
				}
				break;
			}
		}
	}
	catch (excep) {
		return;
	}
	return;
}


function ListSelectCheckboxes(e, f, listdiv)  {
	var bInvert = false;
	try {

		if (e.ctrlKey) bInvert=true;
	}
	catch(excep) {
	
	}
	var objL = document.getElementById(listdiv);
	if (!objL) return;
	var arrI = objL.getElementsByTagName("input");
	for (var i=0; i < arrI.length; i++) {
		if (arrI[i].name == "listitem") {
			if (bInvert)
				arrI[i].checked = !arrI[i].checked;
			else
				arrI[i].checked = f.checked;
		}
	}
}


// ! LISTS

// ######################################################
// Miscellaneous GUI functions
// ######################################################

// Time-honoured image replacement functions
function MM(fd) {
	var img = fd.src;
	var re = /u_/g;
	img=img.replace(re, "s_");
	fd.src = img;
}
function MO(fd) {
	var img = fd.src;
	var re = /s_/g;
	img=img.replace(re, "u_");
	fd.src = img;
}

// Generic function for showing and hiding a section
function ShowHideSection(sectionname) {
	var s = document.getElementById(sectionname);
	if (s) {
		if (s.style.display == "none") {
			s.style.display = "";
		} else {
			s.style.display = "none";
		}
	}
}

// Retrieves the x and y coordinates of an object in terms of pixels from the
// top left of the page
function getXY(Obj)  {
	var sumTop=0;
	var sumLeft=0;
	var bStop = false;
	while (!bStop) {
		sumTop+=Obj.offsetTop;
		sumLeft+=Obj.offsetLeft;
		Obj=Obj.offsetParent;
		if (!Obj) {
			bStop = true;
		} else {
			if (Obj==document.body) bStop = true;
		}

	}
	return {left:sumLeft,top:sumTop}
}

function getScroll(Obj)  {
	var sumTop=0;
	var sumLeft=0;
	var bStop = false;
	var bIncludedHTML = false;
	
	while (!bStop) {
		sumTop += Obj.scrollTop;
		sumLeft += Obj.scrollLeft;

		if (Obj.tagName == "HTML") bIncludedHTML = true;

		Obj=Obj.offsetParent;
		if (!Obj) {
			bStop = true;
		} else {
			if (Obj==document.body) {
					
				sumTop += Obj.scrollTop;
				sumLeft += Obj.scrollLeft;
			
				bStop = true;
			}
		}

	}
	

	if (document.documentElement && !bIncludedHTML) {
		sumTop += document.documentElement.scrollTop;

	}
	return {left:sumLeft,top:sumTop}
}

// As above, but takes scrolling into account
function getXY2(Obj) 
{
var sumTop=0;
var sumLeft=0;
var bStop = false;
while (!bStop) {
	sumTop+=Obj.offsetTop - Obj.scrollTop;
	sumLeft+=Obj.offsetLeft - Obj.scrollLeft;
	Obj=Obj.offsetParent;
	if (!Obj) {
		bStop = true;
	} else {
		if (Obj==document.body) bStop = true;
	}

}
return {left:sumLeft,top:sumTop}
}


// Handles the showing/hiding of an element with a plus/minus button.
function ShowHideRT(elemname) {
	try {
		var elem = document.getElementById(elemname);
		if (elem) {

			var img = document.getElementById("img" + elemname);
			var imgroot = img.src.substr(0,img.src.lastIndexOf('/'));
			var state = 1;
			if (elem.style.display == "none") {
				elem.style.display = "";
				img.src = imgroot + "/rtup.gif";
			} else {
				elem.style.display = "none";
				img.src = imgroot + "/rtdown.gif";
				state = 0;
			}

			SetCookie(elemname,state);
		}
	}
	catch(excep) {
		var dummy=0;
	}
	return;
}

function HideParentDiv(elemname) {
try {
			var e = window.parent.document.getElementById(elemname);
			if (e) e.style.display = "none";
		}
		catch(excep) {
			var gk=0;
		}
		return;					
}
function ElemShowHide(elemname) {
try {
			var e = document.getElementById(elemname);
			if (e) {
				if (e.style.display == "none") 
					e.style.display = "";
				else
					e.style.display = "none";
			}
		}
		catch(excep) {
			var gk=0;
		}
		return;					
}


// ######################################################
// Cookie functions
// ######################################################

function SetCookie(sName, sValue)
{
	var cexp = new Date(); 
	cexp.setTime(cexp.getTime() + (3600000 * 24 * 300)); 
	document.cookie = sName + "=" + escape(sValue) + "; expires=" + cexp.toGMTString() +"; path=/; ";
}

function SetSessionCookie(sName, sValue)
{
	document.cookie = sName + "=" + escape(sValue) + "; path=/;";
}

function DeleteCookie(sName) { 
	var cexp = new Date(); 
	cexp.setTime(cexp.getTime() - 1); 
	var cval = GetCookie(sName); 
	document.cookie = sName + "=; expires=" + cexp.toGMTString() + "; path=/; ";
}

function GetCookie(sName) {
	var aCookie = document.cookie.split("; ");
	for (var i=0; i < aCookie.length; i++) {
		var aCrumb = aCookie[i].split("=");
		if (sName == aCrumb[0]) return unescape(aCrumb[1]);
	}
	return "";
}

// Tests to see if the user's browser is prepared to accept session cookies
function CheckForSessionCookies() {
	// Test cookies
	var d = new Date();
	var t = d.valueOf();
	document.cookie = "spcookietest=" + t + ";path=/";
	return (document.cookie.indexOf("spcookietest=" + t) != -1);
}


// ######################################################
// Status window functions. Reliant on components.js
// ######################################################

var objStatusWindow;
var tmrStatusWindow;
function CreateStatusWindow(StatusText, ContextUrl, width, height) {
	var arrForm = document.getElementsByTagName("FORM");
	var ctE = arrForm.length;
	for (var i = 0; i < ctE; i++) {
		arrForm[i].disabled = true;
	}
	clearInterval(tmrStatusWindow);
	tmrStatusWindow = setInterval("CreateStatusWindow2(\42" + StatusText + "\42)", 1);
}

function CreateStatusWindow2(StatusText) {
	clearInterval(tmrStatusWindow);

	var objDiv = document.getElementById("LoadingBar");
	if (!objDiv) {
		objDiv = document.createElement("DIV");
		objDiv.id = "LoadingBar";
		objDiv.style.position = "absolute";
		objDiv.style.backgroundColor = "#FFFFF0";
		objDiv.style.color = "black";
		objDiv.style.border = "solid 1px #C0C0C0";
		objDiv.style.padding = "2px 6px 4px 4px";
		objDiv.style.display = "none";
		objDiv.style.fontSize = "8pt";
		objDiv.style.textAlign = "center";
		objDiv.style.verticalAlign = "middle";
		objDiv.style.whiteSpace = "nowrap";
		document.body.appendChild(objDiv);
	}
	var w = document.body.offsetWidth;
	
	objDiv.style.top = "0px";
	objDiv.style.height = "18px";
	objDiv.innerHTML = "<img src='" + glbImageRoot + "wait.gif' width='18' height='18' style='padding-top: 0px; vertical-align: middle;' align='middle'/> " + StatusText;
	objDiv.style.display = "";

	objDiv.style.left = (w - objDiv.offsetWidth) + "px";
	objDiv.style.zIndex = 100;
}

function KillStatusWindow() {
	clearInterval(tmrStatusWindow);
	var objDiv = document.getElementById("LoadingBar");
	if (objDiv) {
		objDiv.style.display = "none";
	}

	var arrForm = document.getElementsByTagName("FORM");
	var ctE = arrForm.length;
	for (var i = 0; i < ctE; i++) {
		arrForm[i].disabled = false;
	}
}


function IsCtrlPressed() {
	var bYesNo = false;
	try {
		if (event.ctrlKey) bYesNo = true;
	}
	catch(excep) {
		bYesNo = false;
	}
	return bYesNo;
}


// ######################################################
// Misc service functions
// ######################################################

function Goto(x) {
	document.location = RefreshableUrl(x);
}
function Goto2(x) {
	document.location = x;
}

function x() {return;}

function DoCancel() {
	try {
		history.go(-1);
	}
	catch (e) {
	
	}
}

// ! COMPONENTS

// Checks the availability of XMLHTTP. The (optional) first parameter specifies
// whether or not to do a check for setRequestHeader, which isn't implemented by Opera
function CheckXMLHTTP(bDoRequestHeaderCheck) {
	try {
		var objX = CreateXMLObject();
		objX.open("GET", "test.htm", false);
		if (bDoRequestHeaderCheck) objX.setRequestHeader("content-type", "application/x-www-form-urlencoded");
		if (objX.readyState) 
			return true;
		else
			return false;
	}
	catch (e) {
		return false;
	}
}


// Checks the availability of XMLHTTP. The (optional) first parameter specifies
// whether or not to do a check for setRequestHeader, which isn't implemented by Opera
function CheckXMLHTTP(bDoRequestHeaderCheck) {
	try {
		var objX = CreateXMLObject();
		objX.open("GET", "test.htm", false);
		if (bDoRequestHeaderCheck) objX.setRequestHeader("content-type", "application/x-www-form-urlencoded");
		if (objX.readyState) 
			return true;
		else
			return false;
	}
	catch (e) {
		return false;
	}
}


// Checks which browser we're dealing with. Note the need
// to check for things which masquerade as IE before IE itself
function whichBrs() {
	var agt=navigator.userAgent.toLowerCase();
	if (agt.indexOf("opera") != -1) return 'Opera';
	if (agt.indexOf("staroffice") != -1) return 'Star Office';
	if (agt.indexOf("beonex") != -1) return 'Beonex';
	if (agt.indexOf("chimera") != -1) return 'Chimera';
	if (agt.indexOf("netpositive") != -1) return 'NetPositive';
	if (agt.indexOf("phoenix") != -1) return 'Phoenix';
	if (agt.indexOf("safari") != -1) return 'Safari';
	if (agt.indexOf("skipstone") != -1) return 'SkipStone';
	if (agt.indexOf("msie") != -1) return 'Internet Explorer';
	if (agt.indexOf("netscape") != -1) return 'Netscape';
	if (agt.indexOf("mozilla/5.0") != -1) return 'Mozilla';
	if (agt.indexOf('\/') != -1) {
	if (agt.substr(0,agt.indexOf('\/')) != 'mozilla') {
	return navigator.userAgent.substr(0,agt.indexOf('\/'));}
	else return 'Netscape';} else return navigator.userAgent.substr(0,agt.indexOf(' '));
}

// Function for creating an XMLHTTP object on different browsers.
function CreateXMLObject() {
	var obj = null;
	try {
		// Try the IE-version-7-and-all-other-browsers mode
		obj = new XMLHttpRequest();
	} catch (e) {
		try {
			obj = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				obj = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (E) {
				obj = null;
			}
		}
	}
	return obj;
}

function RefreshableUrl(x) {
	var d = new Date();
	var strAddTx = "refresh=" + d.valueOf();
	if (x.indexOf("?") != -1) {
		return x + "&" + strAddTx;
	} else {
		return x + "?" + strAddTx;
	}

}


function XMLTransmission(strMethod, strUrl, strPost, fnOnResult, fnParam) {
	var objXML = CreateXMLObject();
	var bIsPost = (strMethod == "POST");
	if (!CheckXMLHTTP(bIsPost)) {
		bIsPost = false;
		strUrl += "?" + strPost;
	}
	objXML.open(bIsPost ? "POST" : "GET", RefreshableUrl(strUrl), true);
	if (bIsPost) objXML.setRequestHeader("content-type", "application/x-www-form-urlencoded");
	objXML.onreadystatechange = newReadyStateHandler(objXML, fnOnResult, fnParam);
	objXML.send(bIsPost ? strPost : null);
	return objXML;
}

function newReadyStateHandler(objXML, HandlerFunction, param) {
	if (HandlerFunction) {
		try {
			  return function () {
					HandlerFunction(objXML, param);
			  }
		} catch (err) {}
	}
}


function SetComboValue(fd, ValueId) {
	for (var i=0; i < fd.options.length; i++) {
		if (fd.options[i].value == ValueId) {
			fd.selectedIndex = i;
			return;
		}
	}
}

function GetTodaysDate() {
	var d = new Date();
	switch (glbLanguage) {
		case 'en-us':
			return (d.getMonth() + 1) + "/" + d.getDate() + "/" + d.getFullYear();
		default:
			return d.getDate() + "/" + (d.getMonth() + 1) + "/" + d.getFullYear();
	}
}

function ParseHHMM(f) {
	var x = f.value;
	var arrX;
	if (x.indexOf(".") != -1) {
		arrX = x.split(".");
	} else {
		arrX = x.split(":");
	}
	if (arrX.length == 2) {
		var h = parseInt(arrX[0]);
		var m = parseInt(arrX[1]);
		if (!isNaN(h) && !isNaN(m) && h>=0 && m>=0 && m<60) {
			f.value = (h*60) + m;
		}
	} else {
		var t = Zval(x);
		if (!t) {
			f.value = "";
		} else {
			f.value = t;
		}
	}
}

function ToXml(X) {
	var Y = X.replace(/[&]/g, "&amp;");
	var Y = Y.replace(/[<]/g, "&lt;");
	var Y = Y.replace(/[>]/g, "&gt;");
	return Y;
}



function ShowMenu(e, elem, mnu) {
	var objMenu = document.getElementById(mnu);

	var posX = getXY(elem).left;
	var posY = getXY(elem).top + elem.offsetHeight;
	objMenu.style.left = posX + "px";
	objMenu.style.top = (posY + 2) + "px";

	SetCurrentMenu(objMenu);
	objMenu.style.display = "";
	objMenu.style.zIndex = 99;
	
	// Get the page dimensions
	var lPageWidth = document.body.offsetWidth;
	var lPageHeight = document.body.offsetHeight;

	// Check that the values don't exceed the width
	if (posX + objMenu.offsetWidth > lPageWidth) {
		posX = lPageWidth - objMenu.offsetWidth - 5;
		objMenu.style.left = posX + "px";
	}
	if (posY + objMenu.offsetHeight > lPageHeight) {
		posY = lPageHeight - objMenu.offsetHeight - 5;
		objMenu.style.top = posY + "px";
	}	
}

function ShowMenu2(e, elem, mnu) {
	var objMenu = document.getElementById(mnu);

	var posX = getXY(elem).left;
	var posY = getXY(elem).top + elem.offsetHeight;
	objMenu.style.left = posX + "px";
	objMenu.style.top = (posY + 2) + "px";

	SetCurrentMenu(objMenu);
	objMenu.style.display = "";
	objMenu.style.zIndex = 99;
	
	// Get the page dimensions
	var lPageWidth = document.body.offsetWidth;
	var lPageHeight = document.body.offsetHeight;

	// Check that the values don't exceed the width
	if (posX + objMenu.offsetWidth > lPageWidth) {
		posX = lPageWidth - objMenu.offsetWidth - 5;
		objMenu.style.left = posX + "px";
	}

	var scroll = getScroll(elem).top;

	if (posY + objMenu.offsetHeight - scroll> lPageHeight) {
		posY = lPageHeight - objMenu.offsetHeight - 5 + scroll;
		objMenu.style.top = posY + "px";
	}	
}

function SetCurrentMenu(elem) {
	ClearMenu();
	glbHideMenuElem = elem;
	var d = new Date();
	glbTimeLastClear = d.valueOf();
	document.onclick = ClearMenu;
}

function ClearMenu(bForce) {
	try {
		if (glbHideMenuElem) {
			var d = new Date();
			if (d.valueOf() - glbTimeLastClear > 200) {
				glbHideMenuElem.style.display = "none";
				document.onclick = null;
			}
		}
	} catch (err) {}
}

function ProcessNumberInput(elem) {
	if (elem.value) {
		var x = Xval(elem.value);
		if (x) {
			elem.value = x;
		} else {
			elem.value = "";
		}
	}
}

function KE(e) {
	return KillAnchorOnclick(e);
}

function KillAnchorOnclick(e) {
	e.returnValue = false;
	try {
		e.keyCode = 0;
	} catch (err) {}
	try {
		e.which = 0;
	} catch (err) {}
	try {
		e.cancelBubble = true;
	} catch (err) {}
	try {
		e.stopPropagation();
	} catch (err) {}
	return false;
}

function ChooseDate(elemname) {
	var objElem = document.getElementById(elemname);
	if (!objElem) return;
	glbDateField = elemname;

	var objDiv = document.getElementById("DateSelector");
	if (!objDiv) {
		objDiv = document.createElement("DIV");
		objDiv.id = "DateSelector";
		objDiv.style.position = "absolute";
		objDiv.style.backgroundColor = "#FFFFF7";
		objDiv.style.color = "black";
		objDiv.style.border = "solid 1px #C0C0C0";
		objDiv.style.padding = "0px";
		objDiv.style.display = "none";
		objDiv.style.fontSize = "8pt";
		objDiv.style.textAlign = "center";
		objDiv.style.verticalAlign = "middle";
		objDiv.style.whiteSpace = "nowrap";

		document.body.appendChild(objDiv);
	}
	
	var t = getXY(objElem).top;
	var l = getXY2(objElem).left;

	// May need to adjust for page padding - IE7 only at the moment
	if (whichBrs() == "Internet Explorer" && !IsIE6()) {
		l -= 30;
	}

	var w = document.body.offsetWidth;
	var tx = t;	

	var lAmountScrolledBy = getXY(objElem).top - getXY2(objElem).top;
	

	if (tx + 200  - lAmountScrolledBy > document.body.offsetHeight) {
		tx = t - 203; 
	} else {
		tx += objElem.offsetHeight;
	}


	objDiv.style.top = tx + "px";
	objDiv.style.left = l + "px";
	objDiv.style.height = "200px";
	objDiv.style.zIndex = 100;

	tmrGeneric = setInterval("ChooseDate2('" + objElem.value + "')", 10);
}

function ChooseDate2(v) {
	clearInterval(tmrGeneric);

	var objDiv = document.getElementById("DateSelector");

	objDiv.innerHTML = "<iframe id='aha' frameborder='0' height='200' width='200' style='position: relative; top: 0px; left: 0px; z-index: 100;' src='" + glbSiteRoot + "choosedate.asp?date=" + v + "&l=" + glbLanguage + "'></iframe>";
	objDiv.style.display = "";
	var d = new Date();
	glbTimeLastClear = d.valueOf();
	document.onclick = ClearDateSelector;
}

function ChooseDateCallback(x) {
	var objElem = document.getElementById(glbDateField);
	objElem.value = x;	
	if (ValidateDate(objElem, 0)) {
	} else {
		//objElem.value = "";
	}
	document.getElementById("DateSelector").style.display = "none";	
	
	try {
		Page_ChooseDateCallback(glbDateField);
	} catch (err) {}
}

function ClearDateSelector() {
	try {
		var d = new Date();
		if (d.valueOf() - glbTimeLastClear > 200) {
			document.getElementById("DateSelector").style.display = "none";
			document.onclick = null;
		}
	} catch (err) {}
}

function KillKeyPress(e) {
	try {
		e.cancelBubble = true;
	} catch (err) {}
	try {
		e.stopPropagation();
	} catch (err) {}
	return 0;
}

function Delay_Goto(x) {
	clearInterval(tmrGeneric);
	tmrGeneric = setInterval("Delay_Goto2(\42" + x + "\42)", 10);
}
function Delay_Goto2(x) {
	clearInterval(tmrGeneric);
	Goto(x);
}


var glbSel;

function FileSelector(elemname, fromelem) {
	var objElem = document.getElementById(elemname);
	if (!objElem) return;
	glbFileField = elemname;

	var objDiv = document.getElementById("FileSelector");
	if (!objDiv) {
		objDiv = document.createElement("DIV");
		objDiv.id = "FileSelector";
		objDiv.style.position = "absolute";
		objDiv.style.backgroundColor = "#FFFFF7";
		objDiv.style.color = "black";
		objDiv.style.border = "solid 1px #808080";
		objDiv.style.padding = "0px";
		objDiv.style.display = "none";
		objDiv.style.fontSize = "8pt";
		objDiv.style.textAlign = "center";
		objDiv.style.verticalAlign = "middle";
		objDiv.style.whiteSpace = "nowrap";
		document.body.appendChild(objDiv);
	}
	
	
	var objFromElem = fromelem;
	var t = getXY(objFromElem).top;
	var l = getXY2(objFromElem).left;
	var w = document.body.offsetWidth;
	var tx = t;	

	// May need to adjust for page padding - different settings for different versions of IE
	if (whichBrs() == "Internet Explorer") {
		if (IsIE6()) {
			tx -= 20;
			l = getXY(document.getElementById("ContentContainer")).left + document.getElementById("ContentContainer").offsetLeft;
		} else {
			l -= 30;
		}

	}

	var lAmountScrolledBy = getXY(objFromElem).top - getXY2(objFromElem).top;

	var lDialogHeight = 110;
	
	if (tx + lDialogHeight - lAmountScrolledBy > document.body.offsetHeight) {
		tx = t - lDialogHeight - 3; 
	} else {
		tx += objFromElem.offsetHeight;
	}

	objDiv.style.top = tx + "px";
	objDiv.style.left = l + "px";
	objDiv.style.height = lDialogHeight + "px";
	objDiv.style.zIndex = 100;

	tmrGeneric = setInterval("ChooseFileSelector2(" + lDialogHeight + ")", 10);
}

function ChooseFileSelector2(h) {
	clearInterval(tmrGeneric);

	var objDiv = document.getElementById("FileSelector");

	objDiv.innerHTML = "<iframe scrolling='no' frameborder='0' height='" + h + "' width='400' src='" + glbSiteRoot + "choosefile.asp'></iframe>";
	objDiv.style.display = "";
	objDiv.style.zIndex = 100;
	var d = new Date();
	glbTimeLastClear = d.valueOf();
	document.onclick = ClearFileSelector;
}

function ClearFileSelector() {
	try {
		var d = new Date();
		if (d.valueOf() - glbTimeLastClear > 200) {
			document.getElementById("FileSelector").style.display = "none";
			document.onclick = null;
		}
	} catch (err) {}
}

function ChooseFileCallback(x) {
	var elem = document.getElementById(glbFileField);
	if (x) {
		try {
			var elem = document.getElementById(glbFileField);
			if (elem.tagName.toUpperCase() == "TEXTAREA") {
				if (elem.selectionStart || elem.selectionStart == '0') {
					var startPos = elem.selectionStart;
					var endPos = elem.selectionEnd;
					elem.value = elem.value.substring(0, startPos) + x + elem.value.substring(endPos, elem.value.length);
				} else {
					elem.value += x;
				}
			} else {
				elem.value = x;
			}
		} catch (err) {}
	} else {
		try {
			elem.focus();
		} catch (err) {}
	}
	document.getElementById("FileSelector").style.display = "none";	
}

function StoreTextAreaSelection(elem) {
	if (document.selection) {
		var range = document.selection.createRange(); 
		var stored_range = range.duplicate(); 
		stored_range.moveToElementText(elem);
		stored_range.setEndPoint('EndToEnd',range );
		elem.selectionStart = stored_range.text.length - range.text.length; 
		elem.selectionEnd = elem.selectionStart + range.text.length;
	}
}

function LowUnitWarning(mode) {
	var strPost = "mode=" + mode;

	CreateStatusWindow("Sending message...");

	XMLTransmission("POST", glbSiteRoot + "_LowUnitWarning.asp", strPost, OnLowUnitWarning);
}

function OnLowUnitWarning(objXML) {
	if (objXML.readyState == 4) {
		KillStatusWindow();
		switch (objXML.status) {
			case 200:

				alert("The notification has been sent to your billing contact (and CC'd to you).");
				break;
				
			case 299:
				ErrorMessage(objXML.responseText);
				break;
				
			default:
				alert("An error occurred while trying to send the notification. Please try again, or write directly to your billing contact using your own e-mail software.");
				break
		}
	}
}

function AddNowToUrl(elem) {
	if (elem.href.indexOf("now=") == -1) {
		var d = new Date();
		if (elem.href.indexOf("?") == -1) {
			elem.href += "?now=" + d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getDate();
		} else {
			elem.href += "&now=" + d.getFullYear() + "/" + (d.getMonth() + 1) + "/" + d.getDate();
		}
	}
}

function ErrorMessage(Msg, HttpStatus) {
	if (Msg == "") {
		if (whichBrs() == "Opera") {

			alert("The action failed.\r\n\r\n(We'd like to give you a more detailed explanation, but there's a bug in Opera which causes it to lose the text of these error messages. See our blog for more information.)");
		} else {
			alert("The action failed. Please try again.");

		}
	} else {
		alert(Msg);
	}
}

function MonthName(x) {
	var Months = "January,February,March,April,May,June,July,August,September,October,November,December";
	return Months.split(",")[x-1];
}

function OkayMessage(Msg) {
	alert(Msg);
}

function WarningMessage(Msg) {
	alert(Msg);
}

function IsIE6() {
	if (whichBrs() == "Internet Explorer" && navigator.userAgent.toLowerCase().indexOf("msie 6") > 0) {
		return true;
	} else {
		return false;
	}
}

function DeleteStoredSearch(SearchId) {
	if (!confirm("Are you sure you want to remove this search template?")) return false;
	
	var strPost = "searchid=" + SearchId;
	CreateStatusWindow("Deleting...");
	XMLTransmission("POST", glbSiteRoot + "dashboard/_DeleteStoredSearch.asp", strPost, OnDeleteStoredSearch);
}

function OnDeleteStoredSearch(objXML) {
	if (objXML.readyState == 4) {
		KillStatusWindow();
		switch (objXML.status) {
			case 200:
				try {
					document.getElementById("srch" + objXML.responseText).style.display = "none";
				} catch (err) {}
				break;
			case 299:
				ErrorMessage(objXML.responseText);
				break;
			default:
				ErrorMessage("An error occurred while trying to delete the template. Please try again.");
				break;		
		}
	}

}

var glbCurrentCurrency = "";

function CConv(Currency) {
	if (!glbCurrentCurrency) {

		var arrC = document.getElementsByName("xc");
		var ctC = arrC.length;
		for (var i = 0; i < arrC.length; i++) {
			arrC[i].gbp = arrC[i].innerHTML;
		}
		glbCurrentCurrency = glbBaseCurrency;
	}
	


	if (Currency == glbBaseCurrency) {
		if (glbCurrentCurrency == Currency) return;

		var arrC = document.getElementsByName("xc");
		var ctC = arrC.length;
		for (var i = 0; i < arrC.length; i++) {
			arrC[i].innerHTML = arrC[i].gbp;
		}

		var arrCL = document.getElementsByName("xcl");
		var ctCL = arrC.length;
		for (var i = 0; i < arrCL.length; i++) {
			arrCL[i].innerHTML = Currency;
		}
	
	} else {

		var strList = "";
		var arrC = document.getElementsByName("xc");
		var ctC = arrC.length;
		for (var i = 0; i < arrC.length; i++) {
			strList += (strList ? "|" : "") + arrC[i].gbp;
		}
		
		XMLTransmission("POST", glbSiteRoot + "_Currency.asp", "cur=" + Currency + "&l=" + strList, OnCurrencyConversion);
	}

	SetSessionCookie("cur", Currency);
	glbCurrentCurrency = Currency;
}


function OnCurrencyConversion(objXML) {
	if (objXML.readyState == 4) {
		switch (objXML.status) {
			case 200:
				var arrC = document.getElementsByName("xc");
				var ctC = arrC.length;
				var arrList = objXML.responseText.split("|");
				for (var i = 0; i < arrC.length; i++) {
					arrC[i].innerHTML = arrList[i];
				}
				
				var arrCL = document.getElementsByName("xcl");
				var ctCL = arrC.length;
				for (var i = 0; i < arrCL.length; i++) {
					arrCL[i].innerHTML = glbCurrentCurrency;
				}
			
				break;
			default:
				alert("Unable to do the currency conversion. Please try again.");
				break;
		}
	}
}

function HelpHandler(e, TopicId) {
	try {
		e.returnValue = false;

		// Get the help topic id
		var strTopicId = "";
		if (!TopicId) {
			if (document.getElementById("helptopic")) {
				strTopicId = document.getElementById("helptopic").value;
			}
		} else {
			strTopicId = TopicId;
		}
		
		// Work out the page location
		var hWindow = screen.availHeight * 0.8;
		var wWindow = screen.availWidth * 0.9;
		if (wWindow > 1000) wWindow = 1000;
		if (hWindow > 750) hWindow = 750;
		var tWindow = (screen.availHeight - hWindow) / 2;
		var lWindow = (screen.availWidth - wWindow) / 2;

		var strUrl = glbSiteRoot + "help/helpindex.asp?" + strTopicId;
		var objW = window.open(strUrl, "HelpWindow", "top=" + tWindow + ",left=" + lWindow + ",width=" + wWindow + ",height=" + hWindow + "");
		if (!objW) {
			alert("Your browser software is preventing pop-up windows from being opened. Please switch off your pop-up blocker in order to see the help file.");
		}
		objW.focus();
	}
	catch (ex) {}
}

function SetOpacity(elem, opacity) {
	if (elem.filters) {
		elem.style.filter = 'alpha(opacity=' + opacity + ')';
	} else {
		elem.style.opacity = opacity / 100;
	}
}

function ExpandToFit(e, elem) {
	try {
		if (elem.scrollHeight > elem.offsetHeight) {
			if (whichBrs() == "Internet Explorer") elem.style.width = "99%";
			elem.style.overflowY = "hidden";
			elem.style.height = (elem.scrollHeight + 10) + "px";
		}
	} catch (err) {}
}
function ShrinkAfterFit(e, elem) {
	elem.style.height = "";
	elem.style.overflowY = "";
}

function SafeSetFocus(x) {
	try {
		x.focus();
	} catch (err) {}
}

function MMOver(elem) {
	elem.style.backgroundColor = "#EDEDED";
	elem.style.padding = "3px";
	elem.style.border = "solid 1px #E0E0E0";
}	
function MMOut(elem) {
	elem.style.backgroundColor = "";
	elem.style.border = "";
	elem.style.padding = "";
}	

function ROver(elem) {
	AddClass(elem, "RowHighlight");
}	
function ROut(elem) {
	RemoveClass(elem, "RowHighlight");
}	

function LoadPendingMeetingsMenu() {
	XMLTransmission("GET", glbSiteRoot + "meetings/_PendingMeetingsMenu.asp", "", OnLoadPendingMeetingsMenu);
}

function OnLoadPendingMeetingsMenu(objXML) {
	if (objXML.readyState == 4) {
		switch (objXML.status) {
			case 200:
				document.getElementById("PendingMeetingMenu").innerHTML = objXML.responseText;
				break;
			default:
				break;
		}
	}
}


function LoadPendingActions() {
	XMLTransmission("GET", glbSiteRoot + "meetings/_PendingActionsMenu.asp", "", OnLoadPendingActions);
}

function OnLoadPendingActions(objXML) {
	if (objXML.readyState == 4) {
		switch (objXML.status) {
			case 200:
				document.getElementById("PendingActionMenu").innerHTML = objXML.responseText;
				break;
			default:
				break;
		}
	}
}

function LoadPendingWorkflowItems() {
	XMLTransmission("GET", glbSiteRoot + "workflow/_PendingItemMenu.asp", "", OnLoadPendingWorkflowItems);
}

function OnLoadPendingWorkflowItems(objXML) {
	if (objXML.readyState == 4) {
		switch (objXML.status) {
			case 200:
				document.getElementById("PendingItemMenu").innerHTML = objXML.responseText;
				break;
			default:
				break;
		}
	}
}

function AddClass(elem, strClass) {
	if (strClass == "") return;
	

	var strC = elem.className;
	if (strC == "") {
		elem.className = strClass;
	} else {
		var arrC = strC.split(" ");
		var ctC = arrC.length;
		for (var i = 0; i < ctC; i++) {
			if (arrC[i] == strClass) return;
		}
		
		elem.className += " " + strClass;
	}
}

function RemoveClass(elem, strClass) {
	if (strClass == "") return;
	
	var strC = elem.className;
	if (strC == "") {
		return;
	} else {
		var strNewList = "";
		var arrC = strC.split(" ");
		var ctC = arrC.length;
		for (var i = 0; i < ctC; i++) {
			if (arrC[i] != "" && arrC[i] != strClass) {
				strNewList += (strNewList ? " " : "") + arrC[i];
			}
		}
		
		elem.className = strNewList;
	}
}
