browserName = navigator.appName;
browserVer = parseInt(navigator.appVersion);
var msie4 = (browserName == "Microsoft Internet Explorer" && browserVer >= 4);
if ((browserName == "Netscape" && browserVer >= 3) || msie4 || browserName=="Konqueror") {version = "n3";} else {version = "n2";}
		
// JS functions for swap images
function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

// Blur function
function blurLink(theObject) {
  if (msie4) {theObject.blur();}
//else {this.blur(theObject);}
}

// JS popUp function
function popUp(URL,W,H) {
  day = new Date();
  id = day.getTime();
  eval("page" + id + " = window.open(URL, '" + id + "','toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=' + W + ',height=' + H +' ,left = 300,top = 100');");
}

// JS function for checking email us, subscription and BASE subscription forms
this.borderError = "1px solid #ffa500";
this.borderValid = "1px solid #aadeb3";
function checkSigenaeForm(form) {
  var feedback = 0;
  var nemail = "-1";
  var error = "Please fill the following field(s):\n";
  // check if fields with alt not equal to optional are filled
  for (var n=0 ; n < form.elements.length ; n++) {
    if (form.elements[n].name == "Email") {
      nemail = n;
    }
    if ((form.elements[n].value == "") && (form.elements[n].alt != "optional")) {
      error = error + "  - " + form.elements[n].name + "\n";
      form.elements[n].style.border = this.borderError;
      feedback = 1;
    }
    else {
      form.elements[n].style.border = this.borderValid;
    }
  }
  // if empty required field found, return false
  if (feedback) { 
    alert(error);
    return false;
  }
  else {
    // check email address format if email field exists
    if (nemail != "-1") {
      s1 = form.elements[nemail].value.split(/@/);
      if (s1[1]) { s2 = s1[1].split(/\./); } 
      else { 
        form.elements[nemail].style.border = this.borderError;
        alert("Your email address is not valid\n"); 
        return false; 
      }
      if ((form.elements[nemail].value.search(/ /) != '-1') || (s1.length != 2) || (s1[0] == '') || (s1[1] == '') || (s2.length < 2) || (s2[0] == '') || (s2[1] == '')) {
        form.elements[nemail].style.border = this.borderError;
        alert("Your email address is not valid\n");
        return false;
      }
      else { return true; }
    }
    else { return true; }
  }
}

// JS function for sequence/contig search
function checkSearch() {
  var dataType = this.document.searchData.dataType.value;
  var term = this.document.searchData.term.value;
  var uid = this.document.searchData.uid.value;
  error = "";

  if (uid != 5) {
    if (dataType == "libraries") {
      alert('Sorry, search libraries not available from public pages');
      return false;
    }
    if (dataType == "batches") {
      alert('Sorry, search batches not available from public pages');
      return false;
    }
  }
  if(dataType == "bad") { 
    alert('Please select a valid data type');
    return false;
  }
  if (term == "") {
    error = 'Search ' + dataType + ' for what ?';
    alert(error);
    return false;
  }
 return true;
}

// JS functions for CHC Forum
var toggle=0;
function showhide(num) {
	if(toggle == 0) {
		document.getElementById("div"+num).style.display='block';
		toggle = 1;
	} else {
		document.getElementById("div"+num).style.display='none';
		toggle = 0;	
	}
}

// The following code is taken more or less verbatim from the javascript used in the 
// PHPbb discussion board, including their method of applying bbcode (renamed fcode here) 
// to messages.

// bbCode control by
// subBlue design
// www.subBlue.com

// Startup variables
var imageTag = false;
var theSelection = false;

// Check for Browser & Platform for PC & IE specific bits
// More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html
var clientPC = navigator.userAgent.toLowerCase(); // Get client info
var clientVer = parseInt(navigator.appVersion); // Get browser version

var is_ie = ((clientPC.indexOf("msie") != -1) && (clientPC.indexOf("opera") == -1));
var is_nav = ((clientPC.indexOf('mozilla')!=-1) && (clientPC.indexOf('spoofer')==-1)
                && (clientPC.indexOf('compatible') == -1) && (clientPC.indexOf('opera')==-1)
                && (clientPC.indexOf('webtv')==-1) && (clientPC.indexOf('hotjava')==-1));
var is_moz = 0;

var is_win = ((clientPC.indexOf("win")!=-1) || (clientPC.indexOf("16bit") != -1));
var is_mac = (clientPC.indexOf("mac")!=-1);

// Helpline messages
b_help = "{b_help}";
i_help = "{i_help}";
u_help = "{u_help}";
q_help = "{q_help}";
c_help = "{c_help}";
p_help = "{p_help}";
w_help = "{w_help}";
a_help = "{a_help}";

// Define the bbCode tags
fcode = new Array();
ftags = new Array('[b]','[/b]','[i]','[/i]','[u]','[/u]','[quote]','[/quote]','[img]','[/img]','[url]','[/url]','[color]','[/color]');
imageTag = false;

// Shows the help messages in the helpline window
function helpline(help) {
	document.getElementById("post").helpbox.value = eval(help + "_help");
}


// Replacement for arrayname.length property
function getarraysize(thearray) {
	for (i = 0; i < thearray.length; i++) {
		if ((thearray[i] == "undefined") || (thearray[i] == "") || (thearray[i] == null))
			return i;
		}
	return thearray.length;
}

// Replacement for arrayname.push(value) not implemented in IE until version 5.5
// Appends element to the array
function arraypush(thearray,value) {
	thearray[ getarraysize(thearray) ] = value;
}

// Replacement for arrayname.pop() not implemented in IE until version 5.5
// Removes and returns the last element of an array
function arraypop(thearray) {
	thearraysize = getarraysize(thearray);
	retval = thearray[thearraysize - 1];
	delete thearray[thearraysize - 1];
	return retval;
}

function emoticon(text) {
	var txtarea = document.getElementById("post").text;
	text = ' ' + text + ' ';
	if (txtarea.createTextRange && txtarea.caretPos) {
		var caretPos = txtarea.caretPos;
		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text;
		txtarea.focus();
	} else {
		txtarea.value  += text;
		txtarea.focus();
	}
}

function fcstyle(fcnumber) {
	var txtarea = document.getElementById("post").text;

	txtarea.focus();
	donotinsert = false;
	theSelection = false;
	fclast = 0;

	if (fcnumber == -1) { // Close all open tags & default button names
		while (fcode[0]) {
			butnumber = arraypop(fcode) - 1;
			txtarea.value += ftags[butnumber + 1];
			buttext = eval('document.getElementById("post").addfcode' + butnumber + '.value');
			eval('document.getElementById("post").addfcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
		}
		imageTag = false; // All tags are closed including image tags :D
		txtarea.focus();
		return;
	}

	if ((clientVer >= 4) && is_ie && is_win)
	{
		theSelection = document.selection.createRange().text; // Get text selection
		if (theSelection) {
			// Add tags around selection
			document.selection.createRange().text = ftags[fcnumber] + theSelection + ftags[fcnumber+1];
			txtarea.focus();
			theSelection = '';
			return;
		}
	}
	else if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0))
	{
		mozWrap(txtarea, ftags[fcnumber], ftags[fcnumber+1]);
		return;
	}

	// Find last occurance of an open tag the same as the one just clicked
	for (i = 0; i < fcode.length; i++) {
		if (fcode[i] == fcnumber+1) {
			fclast = i;
			donotinsert = true;
		}
	}

	if (donotinsert) {		// Close all open tags up to the one just clicked & default button names
		while (fcode[fclast]) {
				butnumber = arraypop(fcode) - 1;
				txtarea.value += ftags[butnumber + 1];
				buttext = eval('document.getElementById("post").addfcode' + butnumber + '.value');
				eval('document.getElementById("post").addfcode' + butnumber + '.value ="' + buttext.substr(0,(buttext.length - 1)) + '"');
				imageTag = false;
			}
			txtarea.focus();
			return;
	} else { // Open tags

		if (imageTag && (fcnumber != 14)) {		// Close image tag before adding another
			txtarea.value += ftags[15];
			lastValue = arraypop(fcode) - 1;	// Remove the close image tag from the list
			document.getElementById("post").addfcode14.value = "Img";	// Return button back to normal state
			imageTag = false;
		}

		// Open tag
		txtarea.value += ftags[fcnumber];
		if ((fcnumber == 14) && (imageTag == false)) imageTag = 1; // Check to stop additional tags after an unclosed image tag
		arraypush(fcode,fcnumber+1);
		eval('document.getElementById("post").addfcode'+fcnumber+'.value += "*"');
		txtarea.focus();
		return;
	}
	storeCaret(txtarea);
}

function checkForm() {

	formErrors = false;
  if (!document.getElementById("post").cancel) {
		if (document.getElementById("post").text.value.length < 2) {
			formErrors = "{missing_message}";
		}
		if (document.getElementById("post").subject.value.length < 2) {
			formErrors = "{missing_subject}";
		}
	}

	if (formErrors) {
		alert(formErrors);
		return false;
	} else {
		fcstyle(-1);
		//formObj.preview.disabled = true;
		//formObj.submit.disabled = true;
		return true;
	}
}

// From http://www.massless.org/mozedit/
function mozWrap(txtarea, open, close)
{
	var selLength = txtarea.textLength;
	var selStart = txtarea.selectionStart;
	var selEnd = txtarea.selectionEnd;
	if (selEnd == 1 || selEnd == 2)
		selEnd = selLength;

	var s1 = (txtarea.value).substring(0,selStart);
	var s2 = (txtarea.value).substring(selStart, selEnd)
	var s3 = (txtarea.value).substring(selEnd, selLength);
	txtarea.value = s1 + open + s2 + close + s3;
	return;
}

// Insert at Claret position. Code from
// http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
function storeCaret(textEl) {
	if (textEl.createTextRange) textEl.caretPos = document.selection.createRange().duplicate();
}

