var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

updateMessage = function(targetObj) {
	var msg = "<div class=\"loadingRight\"><strong>Updating automatically populated content.</strong><br/>This process can take several minutes to complete. Please do not navigate away from this page.</div></div>";
	document.getElementById("ub1").innerHTML = msg;
	document.getElementById("ub2").innerHTML = msg;
	document.getElementById("ub3").innerHTML = msg;
}
fiauthtype = function(target,choice) {
	var bc = "";
	if (choice == "2") {
		bc = "In which case, please enter Pubmed ID: <input type='text' name='fi_auth_desc' class='ipt w250'/>";
	} else if (choice == "3") {
		bc = "In which case, please enter Pubmed ID: <input type='text' name='fi_auth_desc' class='ipt w250'/>";
	} else if (choice == "4") {
		bc = "In which case, please enter URL: <input type='text' name='fi_auth_desc' class='ipt w250' value='http://'/>";
	} else if (choice == "5") {
		bc = "In which case, please specify: <input type='text' name='fi_auth_desc' class='ipt w250' value=''/>";
	}
	document.getElementById(target).innerHTML = bc;
}
popUp = function(contentBox) {
	var e = /hide/;
	var popUpMask = document.getElementById("ajaxWash");
	var popUpFill = document.getElementById("ajaxFill");
	var popUpRect = document.getElementById("ajaxDialog");
	var popUpCont = document.getElementById("ajaxContent");
	var sourceDoc;
	if (contentBox) {
		sourceDoc = document.getElementById(contentBox);
	}
	if (popUpMask.className.match( e )) {
		popUpMask.className = popUpMask.className.replace(new RegExp("hide\\b"), "show");
		popUpRect.className = popUpRect.className.replace(new RegExp("hide\\b"), "show");
		popUpCont.className = popUpCont.className.replace(new RegExp("hide\\b"), "show");
		popUpMask.style.height = document.body.clientHeight+"px";
		popUpMask.style.width  = "100%";
		popUpFill.innerHTML = sourceDoc.innerHTML;
	} else {
		popUpMask.className = popUpMask.className.replace(new RegExp("show\\b"), "hide");
		popUpRect.className = popUpRect.className.replace(new RegExp("show\\b"), "hide");
		popUpCont.className = popUpCont.className.replace(new RegExp("show\\b"), "hide");
	}
}
toggleTabs = function(buttonObj,targetObj,totalObj) {
	var e = /hide/;
	cA();
	if (document.getElementById(buttonObj+targetObj+"t") && document.getElementById(buttonObj+targetObj+"c")) {
		var objTS = document.getElementById(buttonObj+targetObj+"t");
		var objCS = document.getElementById(buttonObj+targetObj+"c");
		if (objCS.className.match( e )) {
			for (var i=1; i<=totalObj; i++) {
				if (document.getElementById(buttonObj+i+"c") && document.getElementById(buttonObj+i+"t")) {
					var objC = document.getElementById(buttonObj+i+"c");
					var objT = document.getElementById(buttonObj+i+"t");
					objT.className=objT.className.replace(new RegExp("tabAct\\b"), "tabOff");
					objC.className=objC.className.replace(new RegExp("show\\b"), "hide");
				}
			}
			objTS.className=objTS.className.replace(new RegExp("tabOff\\b"), "tabAct");
			objCS.className=objCS.className.replace(new RegExp("hide\\b"), "show");
		}
	}
}
toggleSwitch = function(buttonObj,targetObj,totalObj) {
	var e = /hide/;
	cA();
	var objTS = document.getElementById(buttonObj+targetObj+"t");
	var objCS = document.getElementById(buttonObj+targetObj+"c");
	if (objCS.className.match( e )) {
		for (var i=1; i<=totalObj; i++) {
			if (document.getElementById(buttonObj+i+"c") && document.getElementById(buttonObj+i+"t")) {
				var objC = document.getElementById(buttonObj+i+"c");
				var objT = document.getElementById(buttonObj+i+"t");
				objT.className=objT.className.replace(new RegExp("swiAct\\b"), "swiOff");
				objC.className=objC.className.replace(new RegExp("show\\b"), "hide");
			}
		}
		objTS.className=objTS.className.replace(new RegExp("swiOff\\b"), "swiAct");
		objCS.className=objCS.className.replace(new RegExp("hide\\b"), "show");
	}
}
toggleAts = function(buttonObj) {
	var e = /hide/;
	cA();
	if (document.getElementById(buttonObj+"_c")) {
		var objCS = document.getElementById(buttonObj+"_c");
		var objTS = document.getElementById(buttonObj);
		if (objCS.className.match( e )) {
			objCS.className = "show";
			objTS.className = "ats_on";
		} else {
			objCS.className = "hide";
			objTS.className = "ats_off";
		}
	}
}
toggleSimple = function(buttonObj,targetObj,totalObj) {
	var e = /hide/;
	cA();
	if (document.getElementById(buttonObj+targetObj+"c")) {
		var objCS = document.getElementById(buttonObj+targetObj+"c");
		if (objCS.className.match( e )) {
			for (var i=1; i<=totalObj; i++) {
				if (document.getElementById(buttonObj+i+"c")) {
					var objC = document.getElementById(buttonObj+i+"c");
					objC.className=objC.className.replace(new RegExp("show\\b"), "hide");
				}
			}
			objCS.className=objCS.className.replace(new RegExp("hide\\b"), "show");
		}
	}
}
toggleSuperSimple = function(targetObj,status,referenceObj) {
	var e = /hide/;
	cA();
	toggleSuperSimpleRef = function(targetState) {
		if (document.getElementById(referenceObj) && targetState) {
			var refObj = document.getElementById(referenceObj);
			if (targetState == "show") {
				refObj.className=refObj.className.replace(new RegExp("add\\b"), "sub");
				refObj.className=refObj.className.replace(new RegExp("sab\\b"), "sab-i");
			} else {
				refObj.className=refObj.className.replace(new RegExp("sub\\b"), "add");
				refObj.className=refObj.className.replace(new RegExp("sab-i\\b"), "sab");
			}
		}
	}
	if (document.getElementById(targetObj)) {
		var objCS = document.getElementById(targetObj);
		if (status == "show") {
			objCS.className=objCS.className.replace(new RegExp("hide\\b"), "show");
			toggleSuperSimpleRef("show");
		} else if (status == "hide") {
			objCS.className=objCS.className.replace(new RegExp("show\\b"), "hide");
			toggleSuperSimpleRef("hide");
		} else {
			if (objCS.className.match( e )) {
				objCS.className=objCS.className.replace(new RegExp("hide\\b"), "show");
				toggleSuperSimpleRef("show");
			} else {
				objCS.className=objCS.className.replace(new RegExp("show\\b"), "hide");
				toggleSuperSimpleRef("hide");
			}
		}
	}
}
toggleSearch = function(buttonObj,targetObj,totalObj,targetMsg) {
	var objTS = document.getElementById(buttonObj+targetObj+"t");
	var objLS = document.getElementById(buttonObj+"l");
	if (buttonObj && totalObj && targetObj && targetMsg) {
		for (var i=1; i<=totalObj; i++) {
			var objT = document.getElementById(buttonObj+i+"t");
			objT.className=objT.className.replace(new RegExp("tabAct\\b"), "tabOff");
		}
		objTS.className=objTS.className.replace(new RegExp("tabOff\\b"), "tabAct");
		objLS.innerHTML = targetMsg;
	}
}
parentToggleSimple = function(buttonObj,targetObj,totalObj) {
	var e = /hide/;
	cA();
	var objCS = parent.document.getElementById(buttonObj+targetObj+"c");
	if (objCS.className.match( e )) {
		for (var i=1; i<=totalObj; i++) {
			var objC = parent.document.getElementById(buttonObj+targetObj+"c");
			objC.className=objC.className.replace(new RegExp("show\\b"), "hide");
		}
		objCS.className=objCS.className.replace(new RegExp("hide\\b"), "show");
	}
}
parentFillSimple = function(targetObj,statement) {
	if (parent.document.getElementById(targetObj)) {
		parent.document.getElementById(targetObj).innerHTML = statement;
	}
}
locatePos_x = function(obj) {
	var cl = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			cl += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x) {
		cl += obj.x;
	}
	return cl;
}
locatePos_y = function(obj) {
	var ct = 0;
	if (obj.offsetParent) {
		while (obj.offsetParent) {
			ct += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y) {
		ct += obj.y;
	}
	return ct;
}
moveObjTo = function(sourceObj,destObj) {
	var source = document.getElementById(sourceObj);
	var dest = document.getElementById(destObj);
	if (source && dest) {
		var moveObjTo_x = locatePos_x(dest);
		var moveObjTo_y = locatePos_y(dest)+dest.offsetHeight;
		if (BrowserDetect.browser == "Explorer") {
		}
		source.style.top = moveObjTo_y + 'px';
		source.style.left = moveObjTo_x + 'px';
	}
}
moveOverlap = function(sourceObj,destObj) {
	var source = document.getElementById(sourceObj);
	var dest = document.getElementById(destObj);
	if (source && dest) {
		var moveObjTo_x = locatePos_x(dest)-10;
		var moveObjTo_y = locatePos_y(dest)-10;
		source.style.top = moveObjTo_y + 'px';
		source.style.left = moveObjTo_x + 'px';
	}
}
moveObjToObjAdvice = function(sourceObj,destObj) {
	if (sourceObj && destObj) {
		var moveObjTo_x = locatePos_x(destObj)-150;
		var moveObjTo_y = locatePos_y(destObj)+destObj.offsetHeight+10;
		sourceObj.style.top = moveObjTo_y + 'px';
		sourceObj.style.left = moveObjTo_x + 'px';
	}
}
moveObjToObjFigures = function(sourceObj,destObj) {
	if (sourceObj && destObj) {
		var moveObjTo_x = locatePos_x(destObj)-sourceObj.offsetWidth-1;
		var moveObjTo_y = locatePos_y(destObj)-1;
		sourceObj.style.top = moveObjTo_y + 'px';
		sourceObj.style.left = moveObjTo_x + 'px';
	}
}
moveObjToObjAdviceRaw = function(sourceObj,destObj) {
	if (sourceObj && destObj) {
		var moveObjTo_x = locatePos_x(destObj);
		var moveObjTo_y = locatePos_y(destObj);
		sourceObj.style.top = moveObjTo_y + 'px';
		sourceObj.style.left = moveObjTo_x + 'px';
	}
}
destroy = function(Obj) {
	var target = document.getElementById(Obj);
	if (target) {
		target.style.display = "none";
	}
}
openMenu = function(buttonObj) {
	var e = /hide/;
	var shBu = document.getElementById(buttonObj);
	var shMe = document.getElementById(buttonObj+"m")
	if (document.getElementById(buttonObj+"m").className.match( e )) {
		var xPos = locatePos_x(shBu);
		var yPos = locatePos_y(shBu);
		yPos += 10;
		yPos += shBu.height;
		shMe.style.top = yPos + 'px';
		shMe.style.left = xPos + 'px';
		shMe.className=shMe.className.replace(new RegExp(" hide\\b"), " show");
	} else {
		shMe.className=shMe.className.replace(new RegExp(" show\\b"), " hide");
	}
}
function fillDestFilename(sourceInput,targetInput) {
	if (!document.getElementById)
		return;
	var path = document.getElementById(sourceInput).value;
	// Find trailing part
	var slash = path.lastIndexOf('/');
	var backslash = path.lastIndexOf('\\');
	var fname;
	if (slash == -1 && backslash == -1) {
		fname = path;
	} else if (slash > backslash) {
		fname = path.substring(slash+1, 10000);
	} else {
		fname = path.substring(backslash+1, 10000);
	}
	// Capitalise first letter and replace spaces by underscores
	fname = fname.charAt(0).toUpperCase().concat(fname.substring(1,10000)).replace(/ /g, '_');
	// Output result
	var destFile = document.getElementById(targetInput);
	if (destFile)
		destFile.value = fname;
}
newAssignment = function(uid,targetDiv,action) {
	var targetDivObj = document.getElementById(targetDiv);
	if (targetDivObj && uid) {
		if (action == "open") {
			targetDivObj.innerHTML = "Please enter a TF name<br/><input type=\"text\" name=\"name\" class=\"ipt-short\" onKeyUp=\"suggest('su"+uid+"','name',event.which);\" onBlur=\"hideSuggest('su"+uid+"');\" id=\"su"+uid+"\"/><br/><a class=\"sab b\" onClick=\"assignArticle('$uid','"+targetDiv+"','su"+uid+"','assignments$uid');\">submit</a> <a class=\"sab\" onClick=\"newAssignment('"+uid+"','"+targetDiv+"','close');\">cancel</a>";
		} else if (action =="close") {
			cA();
		}
	}
}
setHeight = function(referenceObject,targetObject) {
	if (targetObject.style.pixelHeight) { 
		 targetObject.style.pixelHeight = referenceObject.style.pixelHeight;
	} else {
		targetObject.style.height = referenceObject.offsetHeight + "px";
	}
	return false;
}
setWidth = function(referenceObject,targetObject) {
	if (targetObject.style.pixelWidth) { 
		 targetObject.style.pixelWidth = referenceObject.style.pixelWidth;
	} else {
		targetObject.style.width = referenceObject.offsetWidth + "px";
	}
	return false;
}
function resize() {
	var winHeight = document.getElementById('mwc').contentWindow.document.body.scrollHeight + 30;
	document.getElementById('mwc').height = winHeight;
}
oA = function(itemObj,itemDescription) {
	if(itemObj && itemDescription) {
		document.getElementById("adviceBody").innerHTML = itemDescription;
		var adviceObj = document.getElementById("advice");
		adviceObj.className = adviceObj.className.replace(new RegExp("hide\\b"), "show");
	}
}
oBu = function(itemObj,bubbleObj) {
	var adviceObj = document.getElementById(bubbleObj);
	var itemObj = document.getElementById(itemObj);
	adviceObj.className = adviceObj.className.replace(new RegExp("hide\\b"), "show");
	moveObjToObjFigures(adviceObj,itemObj);
}
cBu = function(bubbleObj) {
	var adviceObj = document.getElementById(bubbleObj);
	adviceObj.className = adviceObj.className.replace(new RegExp("show\\b"), "hide");
}
requestLogin = function(targetDiv) {
	var loginBox = document.getElementById("loginBox");
	var targetBox = document.getElementById(targetDiv);
	moveObjToObjAdviceRaw(loginBox,targetBox);
	setHeight(targetBox,loginBox);
	setWidth(targetBox,loginBox);
	loginBox.className = loginBox.className.replace(new RegExp("hide\\b"), "show");
}
cA = function() {
	var adviceObj;
	if (document.getElementById("advice")) {
		adviceObj = document.getElementById("advice");
		adviceObj.className = adviceObj.className.replace(new RegExp("show\\b"), "hide");
	} else if (parent.document.getElementById("advice")) {
		adviceObj = parent.document.getElementById("advice");
		adviceObj.className = adviceObj.className.replace(new RegExp("show\\b"), "hide");
	}
}
toggleTipBubble = function() {
	var switchObj = document.getElementById('tipBubble')
	if (switchObj.innerHTML == "Disable tips") {
		switchObj.innerHTML = "Enable tips";
	} else {
		switchObj.innerHTML = "Disable tips";
	}
}
toggleWave = function() {
	document.getElementById('wave').src = "http://burgundy.cmmt.ubc.ca/tfe/img/wave.gif";
}
iHtmlChange = function(data,targetDiv) {
	if (document.getElementById(targetDiv)) {
		var targetBox = document.getElementById(targetDiv);
		targetBox.innerHTML = data;
	}
}
dW = function(locationTarget) {
	if (!locationTarget) {
		locationTarget = "waveBox";
	}
	if (document.getElementById(locationTarget)) {
		var targetBox = document.getElementById(locationTarget);
		targetBox.className = "show";
	}
}
clearWave = function() {
	if (document.getElementById("waveBox")) {
		var targetBox = document.getElementById("waveBox");
		targetBox.className = "hide";
	}
}
openMenu = function(flip,menu) {
	var f = document.getElementById(flip);
	var m = document.getElementById(menu);
	var t = document.getElementById(menu+"t");
	if (m.className=="ddme hide") {
		moveObjTo(menu,flip);
		f.className = "droppo-a";
		m.className = "ddme show";
		m.focus();
	} else {
		moveObjTo(menu,flip);
		f.className = "droppo";
		m.className = "ddme hide";
	}
}
function insertAtCursor(textArea, myValue) { 
	var myField = window.frames["mediaWikiClient"].document.getElementById(textArea);
	if (document.selection) {
		myField.focus();
		sel = document.selection.createRange(); 
		sel.text = myValue; 
	} else if (myField.selectionStart || myField.selectionStart == '0') {
		var startPos = myField.selectionStart; 
		var endPos = myField.selectionEnd; 
		myField.value = myField.value.substring(0, startPos)+ myValue+ myField.value.substring(endPos, myField.value.length); 
	} else { 
		myField.value += myValue; 
	}
}
var divName = "advice";
var offX = -166;
var offY = 10;
function mouseX(evt) {if (!evt) evt = window.event; if (evt.pageX) return evt.pageX; else if (evt.clientX)return evt.clientX + (document.documentElement.scrollLeft ?  document.documentElement.scrollLeft : document.body.scrollLeft); else return 0;}
function mouseY(evt) {if (!evt) evt = window.event; if (evt.pageY) return evt.pageY; else if (evt.clientY)return evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop); else return 0;}
function follow(evt) {if (document.getElementById) {
if (document.getElementById(divName)) {
	var obj = document.getElementById(divName).style;
	obj.left = (parseInt(mouseX(evt))+offX) + 'px';
	obj.top = (parseInt(mouseY(evt))+offY) + 'px';}}}
	document.onmousemove = follow;