var tool = "INSPECT";
var PTM_DISPLAY = new Object();
PTM_DISPLAY['fix'] = 'FIXED';
PTM_DISPLAY['opt'] = 'OPTIONAL';
PTM_DISPLAY['cterminal'] = 'C-TERMINAL';
PTM_DISPLAY['nterminal'] = 'N-TERMINAL';

options=[
	{name:'ptm_top', target:['INSPECT', 'MSALIGN', 'PEPNOVO'], type:'row'},
	{name:'ptm_bot', target:['INSPECT', 'MSALIGN', 'PEPNOVO'], type:'row'},
	{name:'ptm',	target:['INSPECT', 'PEPNOVO']},
	{name:'msalign',target:['MSALIGN']},

	
	{name:'db',	target:['INSPECT', 'MSALIGN']},
	{name:'msc', target:['INSPECT', 'MSALIGN'], type:'inline'},
	{name:'tolerance', target:['INSPECT', 'MSALIGN'], type:'row'},
	{name:'instrument', target:['INSPECT', 'MSALIGN'], type:'row'},
	{name:'cycteine_protease', target:['INSPECT', 'MSALIGN'], type:'row'},

	{name:'pepnovo',target:['PEPNOVO']},
	{name:'pepnovo_spec_options', target:['PEPNOVO'], type:'row'},

	{name:'msdeconv', target:['MSDECONV']}
];

function selectTool(t){
	tool = t;
	for(var i in options){
		var option = options[i];
		var enabled = false;
		for(var j in option.target)
			if(option.target[j] == t)
				enabled = true;
		switch(option.type){
		case 'inline':
			enableInline(option.name, enabled); break;
		case 'row':
			enableRow(option.name, enabled); break;
		default:
			enableDiv(option.name, enabled);
		}
	}
}

var counter = 0;
var floatRegExp=/^[\+\-]?(\d+(\.\d*)?|\.?\d+)$/;
var aminoAcidRegExp = /^(\*|[ACDEFGHIKLMNPQRSTVWY]+)$/;

function addPTM(form){
	var type_ctrl = form.ptm_type;
	var mass = form.ptm_mass.value;
	var resd = form.ptm_residue.value;
	var type = null;
	for(var i = 0; i < type_ctrl.length; i++)
		if(type_ctrl[i].checked)
			type = type_ctrl[i].value;
	if(!floatRegExp.test(mass)){
		alert('Mass must be real number');
		form.ptm_mass.focus();
		return
	};
	if(!aminoAcidRegExp.test(resd)){
		alert('Residues must be an asterisk or a string of amino acid abbreviations');
		form.ptm_residue.focus();
		return;
	}
	var tbl = document.getElementById('PTM_table');
	var row = tbl.insertRow(tbl.rows.length - 1);
	var ctrlCell = row.insertCell(0);
	var massCell = row.insertCell(1);
	var resdCell = row.insertCell(2);
	var typeCell = row.insertCell(3);
	var ctrlButton = document.createElement('img');
	ctrlButton.src = "images/minus.png";
	ctrlButton.className = "selectable"
	ctrlButton.onclick= function(){
		tbl.deleteRow(row.rowIndex);
		return false;
	}
	ctrlCell.appendChild(ctrlButton);
	massCell.innerHTML = mass;
	resdCell.innerHTML = resd;
	typeCell.innerHTML = PTM_DISPLAY[type];
	var param = document.createElement('input');
	param.type = "hidden";
	param.name = "custom_PTM";
	param.value = mass + ',' + resd + ',' + type;
	row.appendChild(param);
	form.ptm_mass.value = "";
	form.ptm_residue.value = "";
	type_ctrl[1].checked = true;
	form.ptm_mass.focus();
}


function refreshPercentage(){
    var req = createRequest();
    var url = "upload_progress.jsp?uuid=" + uuid;
    req.open("GET", url, true);
    req.onreadystatechange = function(){
		try{
	        if(req.readyState == 4){
			    var xml = req.responseXML;
			    var percentage = xml.getElementsByTagName("percentage")[0].firstChild.nodeValue;
			    document.getElementById("uploadprogress").style.width = (percentage * 3) + 'px';
			    document.getElementById("uploadprogress").firstChild.nodeValue = percentage + '%';
			    document.getElementById("rate").firstChild.nodeValue = 
				    xml.getElementsByTagName("rate")[0].firstChild.nodeValue + 'KB/s';
			    document.getElementById("remaining").firstChild.nodeValue = 
				    xml.getElementsByTagName("remaining")[0].firstChild.nodeValue;
			    document.getElementById("elapsed").firstChild.nodeValue = 
				    xml.getElementsByTagName("elapsed")[0].firstChild.nodeValue;
				if(percentage == "100")
					;
//					location.reload(true);
			    else if(percentage != "-1")
				    setTimeout("refreshPercentage()", 500);
	        }
	    }
	    catch(err){
			setTimeout("refreshPercentage()", 500);	    
	    }
    }
	req.setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" );    
    req.send(null);
}

var uuid;

function prepareSubmit(form){
	checkFolders(form);
	if(checkSubmit(form)){
		uuid = new UUID();
		form.action = "InvokeTools?uuid=" + uuid;
		form.submit();
		toggleDiv('searchinterface');
		toggleDiv('uploadmeter');
		refreshPercentage();
	}
}

function checkFolders(form){
	var specs = specFolder.getSelected();
	var seqs = seqFolder.getSelected();
	var specValue = "", seqValue = "";

	for(var i in specs)
		specValue = specValue + specs[i] + ';';
	for(var i in seqs)
		seqValue = seqValue + seqs[i] + ';';

	form.spec_on_server.value = specValue;		
	form.seq_on_server.value = seqValue;
}
