// var proxyURL = "http://"+ window.location.host + "/~mcipriano/cgi-bin/regtransbase";
var proxyURL = window.location.protocol + "//"+ window.location.hostname + window.location.pathname;

var undefined; // = void 0;


function createNamedElement(type, name) {
   var element = null;
   // Try the IE way; this fails on standards-compliant browsers
   try {
      element = document.createElement('<'+type+' name="'+name+'">');
   } catch (e) {
   }
   if (!element || element.nodeName != type.toUpperCase()) {
      // Non-IE browser; use canonical method to create named element
      element = document.createElement(type);
      element.name = name;
   }
   return element;
} 

function get_taxons_from_gene_pwm_query(source_table_name, source_form_name)
{
	
}
function add_sequence_to_table (theSelFrom, gene_names, target_table_name, return_type)
{
	var taxon_id;
	var taxon_name;
	var e = document.getElementById(gene_names);
	var gene_names_array = gene_names.value.split(/\s*,\s*/)	;
	var prefix = /^\s*-+.+:/;

	for(var i=0; i < theSelFrom.length; i++) {
		if(theSelFrom.options[i].selected) {
		   	taxon_id = theSelFrom.options[i].value;
		  	taxon_name = theSelFrom.options[i].innerHTML;
		  	var match = prefix.test(taxon_name);
		  	var index = taxon_name.search(prefix);
		  	taxon_name = taxon_name.replace(prefix,"");
		    break;
		}
	}
			
	if ( taxon_id != null ) {
		var message_div = document.getElementById('waiting_message_gene');
		message_div.style.display = 'block';
		var gene_add_submit = document.getElementById('gene_add');
		gene_add_submit.disabled = true;

		for (var j=0; j< gene_names_array.length; j++ ) {
			//use AJAX
			var params = '&page=find_seqfeature&headertype=text/html&response_type=string&tf_name='+gene_names_array[j]+'&taxon_id='+taxon_id;
			if(return_type != null)
			{
				params += '&return_type='+return_type;
			}
			sendGeneRequest(params, function (response, status) 
			{
				var obj = response.parseJSON();
				if(obj.error)
				{
					alert(obj.error +' for '+ taxon_name);
					return;
				} else
				{
                                        add_row_to_gene_table(obj.tf_name, taxon_name, obj.seqfeature_id, target_table_name);
                                }		
				var message_div = document.getElementById('waiting_message_gene');
				message_div.style.display = 'none';

				var gene_add_submit = document.getElementById('gene_add');
				gene_add_submit.disabled = false;
			});
		}
	} else {
		alert ("Please select a sequence.")
	}
}



function add_row_to_gene_table(tf_name, taxon_name, seqfeature_id, target_table_name)
{
	//var TABLE_NAME = 'selected_profiles;
	var tbl = document.getElementById(target_table_name);

	var nextRow = tbl.tBodies[0].rows.length;
	var num = nextRow;
	
	// add the row
	var row = tbl.tBodies[0].insertRow(num);
	
	// cell 0 - input text
	var cell = row.insertCell(0);
	cell.innerHTML = tf_name;
	var txtInp = createNamedElement('input', 'tf_name');
//	var txtInp = document.createElement('input');
//	txtInp.setAttribute('type', 'hidden');
//	txtInp.setAttribute('name', 'tf_name');
//	txtInp.setAttribute('value', tf_name);
	txtInp.type = 'hidden';
	txtInp.name = 'tf_name';
	txtInp.value = tf_name;

	cell.appendChild(txtInp);
	
	// cell 1 - text
	cell = row.insertCell(1);
	cell.innerHTML = taxon_name;
	var txtInp = createNamedElement('input', 'taxon_name');
//	txtInp = document.createElement('input');
//	txtInp.setAttribute('type', 'hidden');
//	txtInp.setAttribute('name', 'taxon_name');
//	txtInp.setAttribute('value', taxon_name);
	txtInp.type = 'hidden';
	txtInp.name = 'taxon_name';
	txtInp.value = taxon_name;

	cell.appendChild(txtInp);

	var fld_seqfeature_id = createNamedElement('input', 'seqfeature_id');
//	var fld_seqfeature_id = document.createElement('input');
//	fld_seqfeature_id.setAttribute('type', 'hidden');
//	fld_seqfeature_id.setAttribute('name', 'seqfeature_id');
//	fld_seqfeature_id.setAttribute('value', seqfeature_id);
	fld_seqfeature_id.type = 'hidden';
	fld_seqfeature_id.name = 'seqfeature_id';
	fld_seqfeature_id.value = seqfeature_id;

	cell.appendChild(fld_seqfeature_id);
	
	// cell 2 - input button
	var cell2 = row.insertCell(2);
	var btnEl = document.createElement('input');
	btnEl.setAttribute('type', 'button');
	btnEl.setAttribute('value', 'Delete');
	btnEl.onclick = function () {deleteCurrentRow(this)};
	cell2.appendChild(btnEl);
}


function add_profile_to_table(theSelFrom, target_table_name)
{
	
	
	for(var i=0; i < theSelFrom.length; i++) {
		if(theSelFrom.options[i].selected) 
		{
		   	var profile_id = theSelFrom.options[i].value;
		  	var profile_line =  theSelFrom.options[i].innerHTML;
			var profile_info = profile_line.split('|');
			var profile_name = profile_info[0];
			var profile_desc = profile_info[1];
			add_row_to_profile_table(profile_name, profile_desc, profile_id, target_table_name);
		}
	}
	


}

var profile_colors = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet'];
var letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];

function add_row_to_profile_table(profile_name, profile_description, profile_id, target_table_name)
{
	//var TABLE_NAME = 'selected_profiles;
	var tbl = document.getElementById(target_table_name);

	var nextRow = tbl.tBodies[0].rows.length;
	var num = nextRow;
	
	// add the row
	var row = tbl.tBodies[0].insertRow(num);
	
	// cell 0 - input text
	var cell = row.insertCell(0);
	cell.innerHTML = profile_name;
	var txtInp = createNamedElement('input', 'profile_name');
//	var txtInp = document.createElement('input');
//	txtInp.setAttribute('type', 'hidden');
//	txtInp.setAttribute('name', 'profile_name');
//	txtInp.setAttribute('value', profile_name);
	txtInp.type = 'hidden';
	txtInp.name = 'profile_name';
	txtInp.value = profile_name;
	cell.appendChild(txtInp);

	var allInp = createNamedElement('input', 'profile_values');
//	var allInp = document.createElement('input');
//	allInp.setAttribute('type', 'hidden');
//	allInp.setAttribute('name', 'profile_values');
//	allInp.setAttribute('value', 
//			'profile_name@'+ profile_name + 
//			':profile_description@'+profile_description+
//			':profile_id@'+profile_id+
//			':profile_code@'+letters[num-1]+
//			':profile_colors@'+profile_colors[num-1]  
//			);
	allInp.type = 'hidden';
	allInp.name = 'profile_values';
	allInp.value = 	'profile_name@'+ profile_name + 
			':profile_description@'+profile_description+
			':profile_id@'+profile_id+
			':profile_code@'+letters[num-1]+
			':profile_colors@'+profile_colors[num-1] ;

	cell.appendChild(allInp);

	
	// cell 1 - text
	cell = row.insertCell(1);
	cell.innerHTML = profile_description;
	var txtInp = createNamedElement('input', 'profile_description');
//	txtInp = document.createElement('input');
//	txtInp.setAttribute('type', 'hidden');
//	txtInp.setAttribute('name', 'profile_description');
//	txtInp.setAttribute('value', profile_description);
	txtInp.type = 'hidden';
	txtInp.name = 'profile_description';
	txtInp.value = profile_description;

	cell.appendChild(txtInp);

	var fld_profile_id = createNamedElement('input', 'profile_id');
//	var fld_profile_id = document.createElement('input');
//	fld_profile_id.setAttribute('type', 'hidden');
//	fld_profile_id.setAttribute('name', 'profile_id');
//	fld_profile_id.setAttribute('value', profile_id);
	fld_profile_id.type = 'hidden';
	fld_profile_id.name = 'profile_id';
	fld_profile_id.value = profile_id;

	cell.appendChild(fld_profile_id);

	// cell 2 Code
/*
	cell = row.insertCell(2);
	cell.innerHTML = letters[num-1];
	txtInp = document.createElement('input');
	txtInp.setAttribute('type', 'hidden');
	txtInp.setAttribute('name', 'profile_code');
	txtInp.setAttribute('value', letters[num-1]);
	cell.appendChild(txtInp);

	// cell 3 Color

	cell = row.insertCell(3);
	cell.innerHTML = profile_colors[num-1];
	txtInp = document.createElement('input');
	txtInp.setAttribute('type', 'hidden');
	txtInp.setAttribute('name', 'profile_color');
	txtInp.setAttribute('value', profile_colors[num-1]);
	cell.appendChild(txtInp);
*/
	// cell 4 - input button
	var cell2 = row.insertCell(2);
	var btnEl = document.createElement('input');
	btnEl.setAttribute('type', 'button');
	btnEl.setAttribute('value', 'Delete');
	btnEl.onclick = function () {deleteCurrentRow(this)};
	cell2.appendChild(btnEl);
}

function submitTreeQForm(form_name, form_destination)
{
	var sf_names = document.getElementsByName('seqfeature_id');
	var profile_names = document.getElementsByName('profile_values');
	var consider_operons = document.getElementById('search_operons');
	var params = '&page=get_alignment_taxon_hits_ajax&headertype=text/html';

	if(consider_operons.checked == true)
	{
		params += '&consider_operons=1';
	}
	
	// First remove values from the form destination
	var curr_results = document.getElementsByName('result');
	for(var i = curr_results.length-1; i >= 0; i--)
	{
		curr_results[i].parentNode.removeChild(curr_results[i]);
	}
	// Create the parameters
	for(var i=0; i < sf_names.length; i++)
	{
		params += '&seqfeature_id=' + sf_names[i].value;
	}

	for(var i=0; i < profile_names.length; i++)
	{
		params += '&profile_values=' + profile_names[i].value;
	}
	
	if(sf_names.length > 0 && profile_names.length > 0)
	{
		var message_div = document.getElementById('waiting_message_tree');
		message_div.style.display = 'block';
		var treeq_submit = document.getElementById('treeq_submit');
		treeq_submit.disabled = true;

		sendSearchRequest(	
				params, 
				function (response, status)
				{
					//call applet's method
					document.TreeQ.clearMarkup();	
					document.TreeQ.read_html(response);
					// Remove wait message
					var message_div = document.getElementById('waiting_message_tree');
					message_div.style.display = 'none';
					var treeq_submit = document.getElementById('treeq_submit');
					treeq_submit.disabled = false;


				}
			);
	} else
	{
		var alert_msg = "No parameters selected! Please choose profiles and genes to analyze.";
		if(sf_names.length == 0)
		{
			alert_msg += " No genes chosen! ";
		}
		if(profile_names.length == 0)
		{
			alert_msg += " No profiles chosen! ";
		}
		alert(alert_msg);
//		alert("No parameters selected! Please choose profiles and genes to analyze.");
	}

}


// If there isn't an element with an onclick event in your row, then this function can't be used.
function deleteCurrentRow(obj)
{
	//if (hasLoaded) {
		var delRow = obj.parentNode.parentNode;
		var tbl = delRow.parentNode.parentNode;
		var rIndex = delRow.sectionRowIndex;
		delRow.parentNode.deleteRow(rIndex);
		//deleteRows(rowArray);
		//reorderRows(tbl, rIndex);
	//}
}



function getHTTPRequest() {
var req = null;
    try
    {
		if( window.XMLHttpRequest ) {
			req = new XMLHttpRequest;
		} else if (window.ActiveXObject) {
			req = new ActiveXObject("Microsoft.XMLHTTP");
		}
    } 
	catch(a){}
	return req;
}

function empty_function()
{
}

function sendSearchRequest(parameters, callback) {
	var request=getHTTPRequest();
	if (!request)  {
		alert('You browser does not allow asynchronous calls. Please use the latest version of the browser.');
		return false;
	}

	if (callback) {
		 request.onreadystatechange=function() {
		 	 if (request.readyState==4) {
				 if (request.status == 200) {
					callback( request.responseText, request.status);
					request.onreadystatechange=empty_function;
				 } else {
					alert ( "AJAX error" );
				 }
			 }
		 }
	}
  request.open("POST",proxyURL,true);
  request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  request.setRequestHeader("Content-length", parameters.length);
  request.setRequestHeader("Connection", "close");
  request.send(parameters);
  //return true;
}

function sendGeneRequest(parameters, callback) {
	var request=getHTTPRequest();
	if (!request)  {
		alert('You browser does not allow asynchronous calls. Please use the latest version of the browser.');
		return false;
	}

	if (callback) {
		 request.onreadystatechange=function() {
		 	 if (request.readyState==4) {
				 if (request.status == 200) {
					callback( request.responseText, request.status);
					request.onreadystatechange=empty_function;
				 } else {
					alert ( "Could not get seqfeature_id" );
				 }
			 }
		 }
	}
  request.open("POST",proxyURL,true);
  request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  request.setRequestHeader("Content-length", parameters.length);
  request.setRequestHeader("Connection", "close");
  request.send(parameters);
  //return true;
}



function read_form_values() {
    var f = document.forms['treeq_results'];
    var values = "";
    var line_separator = '\n';
    var element_name = 'result';
    var attributes = document.getElementsByName(element_name);
    for (var i = 0; i < attributes.length; i++) {
    	values += attributes[i].value + line_separator;
    }
    return values;
}

