// var newRowsCounter = 1;

// addrow

function addrow(tab) {
//	newRowsCounter++;
	var dest = document.getElementById(tab).getElementsByTagName("tbody")[0];
    // Get counter
    var lastrowi = dest.getElementsByTagName("tr");
    var counter = getCounter(lastrowi[lastrowi.length-1].getElementsByTagName("input"));
    if (!counter) counter = getCounter(lastrowi[lastrowi.length-1].getElementsByTagName("select"));
    if (!counter) counter = getCounter(lastrowi[lastrowi.length-1].getElementsByTagName("textarea"));
    if (!counter) counter = 100;
    counter++;
    
    
    
	var src  = document.getElementById(tab).getElementsByTagName("tfoot")[0].getElementsByTagName("tr")[0];


    
	var srcopy = src.cloneNode(true);
	retainNames (srcopy.getElementsByTagName("input"),counter);
	retainNames (srcopy.getElementsByTagName("select"),counter);
	dest.appendChild(srcopy);
    // readd events, but not for IE (IE clone events with object)
    if (window.opera || !document.all) {
        assign_trim(cssQuery("input[type=text]", dest.lastChild));
        assign_remrow(cssQuery(".remrow", dest.lastChild));
    }
    
	if (typeof suggest == "object") suggest.load();
	return false;
}

//Get counter
function getCounter(lastrow) {
    var counter;
    var i = 0;
    while (!counter && i < lastrow.length) {
        counter = lastrow[i].name.match(/_([0-9]*)$/);
        if (counter) counter = counter[1];
        i++;
    }
    return counter;
}



// retainNames
// Function adds numeric suffixes to every element that has name parameter. Numeric will suffix follow after "--"

function retainNames (rowcopyFields,counter) {
	for (var i=0; i < rowcopyFields.length; i++) {
		var theName = rowcopyFields[i].name;
		if (theName) {
			if (rowcopyFields[i].type == "radio") {
				rowcopyFields[i].value = theName + counter;
			} else {
				rowcopyFields[i].name = theName + counter;
				rowcopyFields[i].id = theName + counter;  // IE can't find just created elements by name, so it needs ID.
			}
		}
	}
}

// remrow
// Remove the same row in the table where "obj" sits

function remrow(obj,
				radioname,	// radiobuttons name
				hide)		// if presents row will not removed but hided with display:none
{
    // IE find obj
    if (!obj.nodeName) obj = getTargetObj();
    // find tr
	var tr = obj;
    while (tr.nodeName.toLowerCase() != "tr") tr = tr.parentNode;
    // find tbody
	var tbody = tr;
    while (tbody.nodeName.toLowerCase() != "tbody") tbody = tbody.parentNode;

	if (hide)
     	tr.style.display = "none";
	else {
//        if (tbody.getElementsByTagName("tr").length > 1) {
        if (getVisible(tbody.getElementsByTagName("tr")).length > 1) {
           	tbody.removeChild(tr);
        } else {
            resetFields(tr);
        }
    }

	if (radioname) checkRadio (radioname);
}

function getVisible (objects) {
    var visible = [];
    for (var i=0; i < objects.length; i++) {
        if (objects[i].style.display != "none") {
            visible.push( objects[i] );
        }
    }
    return visible;
}


function resetFields(zone) {
    // clearing all inputs with type text or file
    var allinputs = zone.getElementsByTagName("input");
    for (var i=0; i < allinputs.length; i++) {
        if (allinputs[i].type == "text" || allinputs[i].type == "file") {
            allinputs[i].value = "";
        } else if (allinputs[i].type == "checkbox") {
            allinputs[i].checked = false;
        }
    }
    // reseting all selects to first option
    var allselects = zone.getElementsByTagName("select");
    for (var i=0; i < allselects.length; i++) {
        allselects[i].selectedIndex = 0;
    }
}


function SetField(n,val) {
  if(document.getElementsByName(n)) {
     document.getElementsByName(n)[0].value=val;
  }
}


function checkRadio (radioname) {
	var checked = true;
	var fields = document.getElementsByName(radioname);
	for (var i=1; i < fields.length; i++) {
		if (fields[i].checked && (fields[i].parentNode.parentNode.style.display != "none")) {
			return;
		}
		else {
			checked = false;
		}
	}
	if (! checked)
		resetRadio(radioname);
}


function resetRadio (radioname) {
	var checked = false;
	var allradio = document.getElementsByName(radioname);
	for (var j=1; j < allradio.length; j++ ) { //start from 1 because of first hidden row in tfoot
		if ((allradio[j].parentNode.parentNode.style.display != "none") && (checked == false)) {
			allradio[j].checked = true;
			checked = true;
		}
		else {
			allradio[j].checked = false;
		}
	}
}

/*
function SubIsCorrPi(action, name) {
	var objs = document.getElementsByName(name);
	
	for (var j=0; j < objs.length; j++ ) {
	
		if (action) {
			objs[j].disabled = 1;
		} else {
			objs[j].disabled = 0;
			document.getElementById('no').checked = 'true';
		}
	}
	resetRadio(name);
}
*/

function DisableEnableToggler(trigger, name) {
	var objs = document.getElementsByName(name);
	for (var j=0; j < objs.length; j++ ) {
		objs[j].disabled = trigger;
	}
}



// showField
// Show or hide specific field with name start with "file_desc" depend on selected value of "obj"

function showField(obj,field) {
	var nameSuf = obj.name.slice(obj.name.indexOf("-"));
	var controlField = document.getElementById(field + nameSuf);
	if (obj.selectedIndex != 0 )
		controlField.style.display = "block";
	else {
		controlField.style.display = "none";
		var promt = controlField.nextSibling;
	  	while (promt.nodeType != 1) promt = promt.nextSibling;
		promt.style.display = "none";
	}
}


// showRow for submitter as PI





// fieldsRearrange
// Copy all fields with name start with "_" to "hiddenPlace" hidden field as value

function fieldsRearrange (hiddenPlace) {
	var hiddenPlace = document.getElementById(hiddenPlace).getElementsByTagName("input")[0];
	hiddenPlace.value = "";
	var allEl = document.getElementsByTagName("tbody")[0].getElementsByTagName("*");
	var writeBuffer, newElement;
	for (var i=0; i < allEl.length; i++) {
		if (allEl[i].name && (allEl[i].name.charAt(0) == "_")) {
			writeBuffer = document.getElementsByName(allEl[i].name);
			newElement = "&" + allEl[i].name.slice(1) + "=";
			if (allEl[i].type == "file") newElement += URLencode(extractFilename(allEl[i].value));
			else (allEl[i].value == "Enter number...") ? newElement += "" : newElement += URLencode(allEl[i].value);
			hiddenPlace.value += newElement;
		}
	}
}




function URLencode(sStr) {
	return escape(sStr).replace(/\+/g, '%2C').replace(/\"/g,'%22').replace(/\'/g, '%27');
}


function extractFilename(what) {
	if (what.indexOf("/") > -1)
		answer = what.substring(what.lastIndexOf("/")+1,what.length);
	else
		answer = what.substring(what.lastIndexOf("\\")+1,what.length);
	return answer
}



// String Trim functions
// Example sResult = sString.lTrim();

// remove leading whitespace 
String.prototype.lTrim = function () {
return this.replace(/^\s*/, "");
}

// remove trailing whitespace
String.prototype.rTrim = function () {
return this.replace(/\s*$/, "");
}

// remove leading and trailing whitespace
String.prototype.trim = function () {
return this.rTrim().lTrim();
}

// remove all whitespace
String.prototype.fullTrim = function () {
return this.replace(/\s/g, "");
}

// className functions

function addClass(element, className) {
if (!hasClass(element, className)) {
if (element.className) element.className += " " + className;
else element.className = className;
}
};

function removeClass(element, className) {
var regexp = new RegExp("(^|\\s)" + className + "(\\s|$)");
element.className = element.className.replace(regexp, "$2");
};

function hasClass(element, className) {
var regexp = new RegExp("(^|\\s)" + className + "(\\s|$)");
return regexp.test(element.className);
};


  // this function is needed to work around 
  // a bug in IE related to element attributes
  function hasClass2(obj) {
     var result = false;
     if (obj.getAttributeNode("class") != null) {
         result = obj.getAttributeNode("class").value;
     }
     return result;
  }



function showhide (objId,   // *required* object Id name
				   action ) // true - show
							// false - hide
							// not present - switch
{
	if (document.getElementById(objId)) {
		var obj = document.getElementById(objId);
		if (arguments[1] == null) {
			obj.style.display == 'none' ? obj.style.display = '' : obj.style.display = 'none';
		} else {
			arguments[1] == true ? obj.style.display = '' : obj.style.display = 'none';
		}
	}
	return false
}



// addEvent(window, 'load', foo);

function addEvent(obj, evType, fn) {
    if (obj.addEventListener) {
        obj.addEventListener(evType, fn, false); 
        return true; 
    } else if (obj.attachEvent) {
        var r = obj.attachEvent("on"+evType, fn);
        return r;
    } else {
        obj['on' + evType] = fn;
    } 
}



// assign remrow function to buttons
addEvent(window,
	 "load",
	 function() {
 	     //drawZebra();
	     assign_trim(cssQuery("input[type=text]"));
	     assign_messages(cssQuery(".messages a"));
	     assign_remrow(cssQuery(".remrow"));
	     assign_addrow(cssQuery(".addrow"));
	     assign_hint(cssQuery(".hint a"));
	 })

function drawZebra () {
  var elements = cssQuery(".zebra tbody tr:nth-child(even)");
  for (var i = 0; i < elements.length; i++)
     addClass(elements[i], "altrow");
  var elements = cssQuery(".zebra tbody tr:nth-child(odd)");
  for (var i = 0; i < elements.length; i++)
     removeClass(elements[i], "altrow");
}

function assign_trim (elements) {
    for (var i=0; i < elements.length; i++) {
        addEvent (elements[i],"blur",function(){
            var obj = this;
            if (!obj.nodeName) obj = getTargetObj(); // IE find obj
            obj.value = obj.value.trim();
        })
    }
}


function assign_messages (elements) {
    for (var i=0; i < elements.length; i++) {
        addEvent (elements[i],"click",function(event){
            if (event && event.cancelable && event.preventDefault) event.preventDefault();   // W3C DOM cancel default action - works in Opera, Mozilla, Safari
            var obj = this;
            if (!obj.nodeName) obj = getTargetObj(); // IE find obj
            popupWin = window.open(obj.href, 'help', 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=no,width=400,height=300');
            popupWin.focus();
            return false;  // cancel default action - works in IE
        })
    }
}


function assign_remrow (elements) {
    for (var i=0; i < elements.length; i++) {
        addEvent (elements[i],"click",function(){remrow(this);drawZebra()})
    }
}

function assign_addrow (elements) {
    for (var i=0; i < elements.length; i++) {
       eval("addEvent (elements[i],'click',function(event){ if (event && event.cancelable && event.preventDefault) { event.preventDefault() } addrow('" + elements[i].className.match(/(^|\s)addrow-([a-z-0-9_]*)/)[2] + "'); drawZebra(); return false; })");
    }
}

//  if (e.preventDefault) {
//    e.preventDefault();
//  } else {
//    e.returnValue = false;
//  }    
    
    
function assign_hint (elements) {
    for (var i=0; i < elements.length; i++) {
        addEvent (elements[i],"click",function(event){
            if (event && event.cancelable && event.preventDefault) event.preventDefault();   // W3C DOM cancel default action - works in Opera, Mozilla, Safari
            var obj = this;
            if (!obj.nodeName) obj = getTargetObj(); // IE find obj
            popupWin = window.open(obj.href, 'help', 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=no,width=400,height=300');
            popupWin.focus();
            return false;  // cancel default action - works in IE
        })
    }
}


function getTargetObj (e) {
    var oTarget;
    var e = window.event;
    if ( e == null ) return null;
    if ( e.srcElement != null ) {
        oTarget = event.srcElement;
    } else {
        oTarget = e.target;
    }
    while ( oTarget && oTarget.nodeType != 1 ) oTarget = oTarget.parentNode;
    return oTarget;
}

function showtext(index) {
    var newtext_name = "textval"+"_"+index;
    var obj = document.getElementById(newtext_name);
    if(obj) {
       document.getElementById('textinfo').innerHTML=obj.innerHTML;
    }
}


function showhideclass (objTag, objClass, action )
// true - show
// false - hide
 // not present - switch
{
     if (document.getElementsByTagName(objTag)) {
        var obj = document.getElementsByTagName(objTag);
        for (var i = 0; i < obj.length; i++) {
            if (obj[i].className) {
                var arr = obj[i].className.split(" ");
                for( var j=0; j< arr.length; j++) { 
                    if( arr[j] == objClass) { 
                        if (arguments[2] == null) { 
                            obj[i].style.display == 'none' ?  obj[i].style.display = '' : 
                                                              obj[i].style.display = 'none'; 
                        } else { 
                            arguments[2] == true ?  obj[i].style.display = '' : 
                                                    obj[i].style.display = 'none'; 
                        } 
                    } 
                } 
            } 
        } 
    } 
    return false;
}


function OnClickNewSubmission(tool, ask) {
    if (!ask || confirm('This will discard your incomplete submission. Do you want to continue?')) {
        location.href='?form=history&amp;session=new&amp;tool=' + tool ;
        return true;
    } else {
        return false;
    }
}


function addToFeatSelection(allseq_name, featseq_name)
{
     var allObj = document.getElementById(allseq_name);
     var featObj = document.getElementById(featseq_name);
     if( (allObj == null) || (featObj == null) ) {
       return;
     }
     for(idx = allObj.length; idx > 0; idx--) {
        if( allObj.options[idx-1].selected ) {
            featObj.appendChild(allObj.options.item(idx-1));
        }
     }
     featObj.selectedIndex = allObj.selectedIndex = -1;
}


function removeFromFeatSelection(allseq_name, featseq_name)
{
     var allObj = document.getElementById(allseq_name);
     var featObj = document.getElementById(featseq_name);
     if( (allObj == null) || (featObj == null) ) {
       return;
     }
     for(idx = featObj.length; idx > 0; idx--) {
        if( featObj.options[idx-1].selected ) { 
            allObj.appendChild(featObj.options.item(idx-1));
        }
     }
     featObj.selectedIndex = allObj.selectedIndex = -1;
}


function setFeatId(Value)
{
     var featId = document.getElementById('feat_id');
     if( featId ) {
       featId.value = Value;
     }
     return true;
}


function setFeatNameId(Value)
{
     var featNameId = document.getElementById('feat_name_id');
     if( featNameId ) {
       featNameId.value = Value;
     }
     return true;
}


function selectSeqs(specific_seqs)
{
    var sObj = document.getElementById(specific_seqs);
    if( sObj ) {
      //alert(sObj.length);
      for(idx = 0; idx < sObj.length; idx ++ ) {
        sObj.options[idx].selected = true;
      }
    }
    return true;
}


function populateValueForSrcMod(sObj)
{
  if ( sObj ) {
    if ((sObj.options[sObj.selectedIndex].text == 'Environmental Sample') ||
      (sObj.options[sObj.selectedIndex].text == 'Metagenomic') ||
      (sObj.options[sObj.selectedIndex].text == 'Germline') ||
      (sObj.options[sObj.selectedIndex].text == 'Rearranged') ||
      (sObj.options[sObj.selectedIndex].text == 'Transgenic') ) {

      var obj2_id = sObj.name.replace(/name/, 'value');
      document.getElementById(obj2_id).value = 'TRUE';
    }
  }
}


function populateValueForFeatQual(sObj)
{
  if ( sObj ) {
    if (sObj.options[sObj.selectedIndex].text == 'pseudo')
    {
      var obj2_id = sObj.name.replace(/name/, 'value');
      document.getElementById(obj2_id).value = 'TRUE';
    }
  }
}


function markDelMod(smod_id, smod_val)
{
     var modId = document.getElementById('del_mod_id');
     if( modId ) {
       modId.value = smod_id;
     }
     var modVal = document.getElementById('del_mod_val');
     if (modVal) {
        modVal.value = smod_val;
     }
     return true;
}
