/************************************************
	java script for user input checking etc
	updated by Josefine Sprenger 070629
	Shane Zhang, Bioinformatics IMB, UQ
	s.zhang@imb.uq.edu.au
	2005-12-13
**************************************************/
	var objHttp = null;
	var okID = false;
	var okPM = false;
	
	function Exit() {
		window.close();
	}
	
	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 checkLocateId(fieldId) {

		okID = false;
		
		if (!objHttp){ 
			objHttp = getHttpRequest();
		}

		var strId = document.getElementById(fieldId).value;
		
		if (!objHttp) {
			okID = true;
			return true;
		}
		
		if (!isValidLocateID(strId)) {		        
			setError("You must enter a valid LOCATE ID. Please check.");
			okID = false;
			return false;
		}
		else {
			resetError("&nbsp;");
		}
		
		//JS070629 var serverUrl = "http://ccb.imb.uq.edu.au/cgi-bin/LOC_UPLOAD/litIdChecker.cgi";
		var serverUrl = "http://ccb.imb.uq.edu.au/cgi-bin/LOC_UPLOAD/litIdChecker_ips8.cgi";
		objHttp.open("GET", serverUrl + "?lit_id=" + strId, true);
		document.body.style.cursor = "wait";
		objHttp.onreadystatechange = handleHttpResponse;
		objHttp.send(null);
		//return okID;
	}
	
	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("&nbsp;");
				okID = true;
			}
			document.body.style.cursor = "auto";
		}
	}
	
	function checkPMID(fieldId) {
		okPM = false;
		if (!objHttp) {
			objHttp = getHttpRequest();
		}
		
		var strPMID = document.getElementById(fieldId).value;
		
		if (!objHttp) {
			okPM = true;
			return true;
		}
		
		strPMID = trim(strPMID);
		
		if (!strPMID) {
			setError("PubMed ID must not be empty!");
			okPM = false;
			return false;
		}
		
		if (!isValidPMID(strPMID)) {
			setError("You must enter a valid PubMed ID. Please check.");
			okPM = false;
			return false;
		}
		else {
			resetError("&nbsp;");
		}
		
		var checkerUrl = "http://ccb.imb.uq.edu.au/cgi-bin/LOC_UPLOAD/pmIdChecker.cgi";
		objHttp.open("GET", checkerUrl + "?pmid=" + strPMID, true);
		document.body.style.cursor = "wait";
		objHttp.onreadystatechange = handlePMIDCheckResponse;
		objHttp.send(null);
		//return okPM;
	}
	
	function handlePMIDCheckResponse() {
		var pmInfo = null;
		
		if (objHttp.readyState == 4) {
			pmInfo = objHttp.responseText;
			if (pmInfo.indexOf("<PMID>OK</PMID>") == -1) {
				setError("You have entered an invalid PubMed ID. Please check.");
				okPM = false;
			}
			else {
				resetError("&nbsp;");
				okPM = 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 check_admin_upload(frmName) {
		var isUsrOk = false;
		var isDataOk = false;
		isUsrOk = check_user(frmName);
		
		if (!isUsrOk) {
			return false;
		}
		
		isDataOk = check_data(frmName);
		if (!isDataOk) {
			return false;
		}
		return true;
	}
	
	function check_data(frmName) {
		var myForm = document.forms[frmName];
		var myOptions = myForm.upload_type;
		var blnOptionOk = false;
		var dType = -1;
		var strFile = myForm.file_txt.value;
		
		// check data type to upload	
		for (i = 0; i < myOptions.length; i++) {
			if (myOptions[i].checked) {
				dType = myOptions[i].value;
				blnOptionOk = true;
			}
		}
		
		if (!blnOptionOk) {
			setError("You must select the type of data to upload!");
			return false;
		}
		
		if (dType == 2) {
			if (!check_contact(frmName)) {
				return false;
			}
		}
				
		// check file 
		strFile = trim(strFile);
		if (!strFile) {
			setError("You must specify the data file to upload!");
			//myForm.file_txt.focus();
			return false;
		}
		
		// check type of file - rudimentary checking extension?
		
		if (dType == 1 || dType == 3) {
			setError("Batch upload for this type of data has not been implemented yet. Please contact R.T. for information.");
			return false;
		}
		
		alert("The batch uploading process may take a while to complete. Please be patient.");
		disableSubmit();
		return true;
	}
	
	function checkFileType(strFile) {
		return true;
	}
	
	function check_user(frmName) {
		var myForm = document.forms[frmName];
		var strUser = myForm.usrname.value;
		var strPasswd = myForm.usrpass.value;
		
		strUser = trim(strUser);
		
		//check user name
		if (!strUser) {
			alert("User name must not be empty!");
			//myForm.usrname.focus();
			return false;
		}
		
		// check password
		strPasswd = trim(strPasswd);
		if (!strPasswd) {
			alert("Password must not be empty!");
			//myForm.usrpass.focus();
			return false;
		}
		
		return true;
	}
	
	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 isDescValid(strInput) {
		
		strInput = trim(strInput);
		
		var strClean = strInput.replace(/\W/g, "");
		
		// blank string?
		if (!strInput) {
			return false;
		}
		
		// none word character only?
		if ( strClean == "") {
			return false;
		}
		
		// number only?
		if (strClean.match(/^\d+$/)) {
			return false;
		}
		
		// under score only?
		
		if (strClean.match(/^_+$/)) {
			return false;
		}
		
		return true;
	}
	
	function check_contact(strForm) {
		var myForm = document.forms[strForm];
		var strName = myForm.cur_name.value;
		var strEmail = myForm.cur_email.value;
		var strAddress = myForm.cur_address.value;
		
		strAddress = trim(strAddress);
		
		if (!isDescValid(strName)) {
			setError("Please enter valid curator name.");
			return false;
		}
		else {
			resetError("&nbsp;");
		}
		
		if (!isValidEmail(strEmail)) {
			setError("Please enter valid email address.");
			return false;
		}
		else {
			resetError("&nbsp;");
		}
		
		// address optional?
		if (strAddress != "" && !isDescValid(strAddress)) {
			setError("Please enter valid address.");
			return false;
		}
		else {
			resetError("&nbsp;");
		}
		
		return true;
	}
	
	function isValidLocateID(strID) {
		
		strID = trim(strID);
		
		// blank
		if (!strID) {
			//setError("LOCATE ID must not be empty!");
			return false;
		}
		
		// number only - protein ID
		if (strID.match(/^\d+$/)) {					
			return true;
		}
		
		// IPS8 ID	
	// JS070629 if (strID.match(/^PA\d+(\.\d+)?...
		if (strID.match(/^[mh]PA\d+(\.\d+)?$/)) {
			return true;
		}
		
		// Riken accession number
		if (strID.length == 10 && strID.match(/^[a-zA-Z0-9]+[a-zA-Z]\d{2}$/)) {		
			return true;
		}
		
		// pattern for genbank accession number and others - any string of word characters
		if (strID.match(/^\w+$/)) {							
			return true;
		}
		return false;	
	}
	
	function isValidPMID(strID) {
		strID = trim(strID);
		
		if (!strID) {
			return false;
		}
		
		if (strID.match(/\D+/)) {
			return false;
		}
		return true;
	}
	
	function isValidLocTerm(strInput) {
		
		strInput = trim(strInput);
		
		if (!strInput) {
			return false;
		}	
		
		if (strInput == "NONE") {
			return false;
		}
		
		return true;
	}
	
			
	function check_literature(strForm) {
		var myForm = document.forms[strForm];
		var locID = myForm.lit_id.value;
		
		if (!isValidLocateID(locID)) {
			setError("Are you sure you have entered a valid LOCATE ID?");
			return false;
		}
		
		var primaryTerm = myForm.pri_term.value;
		
		if (!isValidLocTerm(primaryTerm)) {
			setError("Invalid primary localization term entered!");
			return false;
		}
		
		// secondary localization term optional?
		/*
		var secondaryTerm = myForm.sec_term.value;
		if (!isValidLocTerm(secondaryTerm)) {
			setError("Invalid secondary localization term entered!");
			return false;
		}
		*/
		
		var strPMID = myForm.pmid.value;
		strPMID = trim(strPMID);
		
		if (!isValidPMID(strPMID)) {
			setError("Please enter a valid PubMed ID.");
			return false;
		}
		
		if (!checkSpecies(strForm)) {
			return false;
		}
		
		var strDesc = myForm.desc_notes.value;
		strDesc = trim(strDesc);
		
		// description optional?
		if (!strDesc) {
			return true;
		}
		// else check further
		if (!isDescValid(strDesc)) {
			setError("Please stop entering nonsense in the Notes field!");
			return false;
		}
		
		if (!okID) {
			setError("The entered LOCATE ID is invalid!");
			return false;
		}
		
		if (strPMID && !okPM) {
			setError("The entered PubMed ID is invalid!");
			return false;
		}
		resetError("&nbsp;");
		return true;
	}
	
	function checkPrimaryTerm(frmId) {
		var frmLit = document.forms[frmId];
		var pTerm = frmLit.pri_term.value;
		
		if (pTerm == "NONE") {
			setError("You must select a valid primary term.");
		}
		else {
			resetError("&nbsp;");
		}
	}
	
	function checkSpecies(frmId) {
		var frmLit = document.forms[frmId];
		var optList= frmLit.organism;
		if (optList.options[optList.selectedIndex].value == "NONE") {
			setError("Please select a valid term for organism.");
			return false;
		}
		resetError("&nbsp;");
		return true;
	}
	
	function checkDescription(frmId) {
		var frmLit = document.forms[frmId];
		var strDesc = frmLit.desc_notes.value;
		strDesc = trim(strDesc);
		
		if (strDesc != "" && !isDescValid(strDesc)) {
			setError("Please stop entering nonsense in the Notes field!");
		}
		else {
			resetError("&nbsp;");
		}
	}
	
	function check_lit_single_upload(strForm) {
		
		if (!check_contact(strForm)) {
			return false;
		}
		
		if (!check_literature(strForm)) {
			return false;
		}
		
		//alert("The system is currently being tested and will be available soon. Stay tuned");
		disableSubmit();
		return true;
	}
	
	function displaySelectedOption(lstSelect) {
		var myOptions = document.getElementById(lstSelect);
		alert(myOptions.value + " selected!");
	}

	function showCuratorHideImage(radID, curatorID, imgID) {
		var radLiterature = document.getElementById(radID);
		var curatorDIV = document.getElementById(curatorID);
		if (radLiterature.checked) {
			curatorDIV.style.display = "block";
		}
		resetError("&nbsp;");	
		hideImageFile(imgID);
	}
	
	function hideCuratorShowImage(radID, curatorID, imgID) {
		var radLiterature = document.getElementById(radID);
		var curatorDIV = document.getElementById(curatorID);
		
		if (radLiterature.checked) {
			curatorDIV.style.display = "none";
		}
		resetError("&nbsp;");
		showImageFile(imgID);
	}
	
	function hideCuratorHideImage(radID, curatorID, imgID) {
		var radLiterature = document.getElementById(radID);
		var curatorDIV = document.getElementById(curatorID);
		
		if (radLiterature.checked) {
			curatorDIV.style.display = "none";
		}
		
		resetError("&nbsp;");
		
		hideImageFile(imgID);
	}

	function showImageFile(divImgFile) {
		var imgFileDIV = document.getElementById(divImgFile);
		imgFileDIV.style.display ="block";
	}
	
	function hideImageFile(divImgFile) {
		var imgFileDIV = document.getElementById(divImgFile);
		imgFileDIV.style.display ="none";	
	}
	
	function showFormatInfo(elementId) {
		var myElement = document.getElementById(elementId);
		myElement.style.display = "block";
	}
	
	function hideFormatInfo(elementId) {
		var myElement = document.getElementById(elementId);
		myElement.style.display = "none";
	}
	
	function displayError(divErrorId, blnShow) {
		var divError = document.getElementById(divErrorId);
		if (blnShow) {
			divError.style.display = "block";
		}
		if (!blnShow) {
			divError.style.display = "none";
		}
	}
	
	function showPubMedInfo(pmDiv) {
		var divPubMed = document.getElementById(pmDiv);
		var divContact = document.getElementById('contact_info_div');
		var divLitInfo = document.getElementById('lit_info_div');
		var divButtons = document.getElementById('lit_cmd_btn_div');

		if (divContact) {
			divContact.style.display = "none";
		}
		
		if (divLitInfo) {
			divLitInfo.style.display = "none";
		}
		
		if (divButtons) {
			divButtons.style.display = "none";
		}
		
		if (divPubMed) {
			divPubMed.style.display = "block";
		}
	}

	function hidePubMedInfo(pmDiv) {
		var divPubMed = document.getElementById(pmDiv);
		var divContact = document.getElementById('contact_info_div');
		var divLitInfo = document.getElementById('lit_info_div');
		var divButtons = document.getElementById('lit_cmd_btn_div');
		
		if (divPubMed) {
			divPubMed.style.display = "none";
		}		

		if (divContact) {
			divContact.style.display = "block";
		}

		if (divLitInfo) {
			divLitInfo.style.display = "block";
		}

		if (divButtons) {
			divButtons.style.display = "block";
		}		
	}

	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";		
	}
	
	function enableSubmit() {
		var cmdSubmit = document.getElementById('btnSubmit');
		if (cmdSubmit) {
			cmdSubmit.disabled = false;
		}
	}

	function resetAll() {
		resetError("&nbsp;");
		enableSubmit();
	}
	
	function disableSubmit() {
		var cmdSubmit = document.getElementById('btnSubmit');
		if (cmdSubmit) {
			cmdSubmit.disabled = true;
		}
	}

