/************************************************
	java script for user input checking etc
	Shane Zhang, Bioinformatics IMB, UQ
	s.zhang@imb.uq.edu.au
	2006-04-20
	Revision based on loc_admin.js
**************************************************/
	var objHttp = null;
	
	var strProgress = "|";
	var strProcID = null;
	var progressbar = null;
	var timerID = null;
	
	var okID = false;
	var okPM = false;
	
	function Exit() {
		window.close();
	}
	
	function UpdateProgress() {	
		if (!progressbar) {
			progressbar = document.getElementById('asap_progress_bar');
		}
		
		try {
			strProgress = progressbar.firstChild.nodeValue;	
			strProgress = trim(strProgress);
			strProgress += "|";
			if (strProgress.length >= 100) {
				strProgress = "|";
			}
			progressbar.firstChild.nodeValue = strProgress;
			//window.location.reload();
			setTimeout('UpdateProgress();', 1000);
			self.status = "ASAP running ...";			
		}
		catch(e) {
			// do nothing
			alert("error: updating progress");
		}
	}
	
	//execute status reporter and check status
	function CheckProcessStatus(strPID) {
		//objHttp = null;
		strProcID = strPID;
		if (!objHttp){ 
			objHttp = getHttpRequest();
		}
		
		if (!objHttp) {
			window.alert("Your Web browser does not support XMLHttpRequest. Please wait for a minute or two and manually refresh the result page");
			return;
		}
		
		var checkerUrl = "http://ccb.imb.uq.edu.au/cgi-bin/asapChecker.cgi";
		objHttp.open("GET", checkerUrl + "?ASAP_ID=" + strProcID, true);
		document.body.style.cursor = "wait";
		objHttp.onreadystatechange = handleStatusChecker;
		objHttp.send(null);
	}
	
	function getHttpRequest() {
		try {
			return new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {}
		
		try {
			return new ActiveXObject("Microsoft.XMLHTTP");
		} catch (e) {}
		
		try {
			return new XMLHttpRequest();
		} catch (e) {}
		
		alert ("Your browser does not support XMLHttpRequest!");
		return null;
	}
		
	function handleStatusChecker() {
		var strMsg = null;
		if (objHttp.readyState == 4) {
			strMsg = objHttp.responseText;
			document.body.style.cursor = "auto";
			if (strMsg.indexOf("DONE") != -1) {
				strProcID = null;
				clearTimeout(timerID);
				self.status = "ASAP job completed";
				// reload the page
				window.location.reload();
			}
			
			if (strMsg.indexOf("TIMEOUT") != -1) {
				//window.alert("Server job checker timed out! Please refresh the page manually.");
				//clearTimeout(timerID);
				// reload page in 20 seconds
				setTimeout('window.location.reload()', 20000);
			}
			
			if (strMsg.indexOf("INVALID") != -1) {
				strProcID = null;
				window.alert("Error: the submitted job is not valid.");
				self.status = "Done with error";
			}
		}
	}
	
	function handleHttpResponse() {
		var results = null;
		if (objHttp.readyState == 4) {
			results = objHttp.responseText;
			if (results.indexOf("<ID>OK</ID>") == -1) {
				setError("You have entered an invalid LOCATE ID. Please check.");
				okID = false;
			} 
			else {
				resetError("Ok");
				okID = true;
			}
			document.body.style.cursor = "auto";
		}
	}
		
	function check_browser() {
		var browser = navigator.appName;
		var version = navigator.appVersion;
		alert("The browser is " + browser + ", version is " + version);
	}
	
		
	function trim(myStr) {
		return myStr.replace(/^\s+|\s+$/g, "");
	}
	
	function isValidEmail(strEmail) {
		var strPattern = /^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*(\.[a-zA-Z]{2,3})$/;
		strEmail = trim(strEmail);
		if (!strEmail) {
			return false;
		}
		
		return strEmail.match(strPattern);
	}
	
	function displaySelectedOption(lstSelect) {
		var myOptions = document.getElementById(lstSelect);
		alert(myOptions.value + " selected!");
	}
	
	function displayError(divErrorId, blnShow) {
		var divError = document.getElementById(divErrorId);
		if (blnShow) {
			divError.style.display = "block";
		}
		if (!blnShow) {
			divError.style.display = "none";
		}
	}

	function setError(strMsg) {
		var errMsg = document.getElementById('p_err_msg');
		errMsg.firstChild.nodeValue = strMsg;
		errMsg.style.display = "block";
	}
	
	function resetError(strMsg) {
		var errMsg = document.getElementById('p_err_msg');
		errMsg.firstChild.nodeValue = strMsg;
		errMsg.style.display = "none";		
	}
	
