$(function(){
  init();
});

var ajaxHandle;
var adjTraverser = 1;
var virtualTop = 1;

function init () {
	/*$(':submit').click ( function () {sendData();});*/
	
	//if($('#len')){ $('#len').numeric(); }

	$('#loading').hide();

	$('#len').change(function() {
		if($(this).val() < 18){ alert("Minimum signature length must be greater than 18"); $(this).val('18');}
	});
	$('#textB1').change(function(){checkKunique();populate2nd();});
	$('#len').mousedown(function(){
		$('#textinput2').css('background','url(/images/input_out.gif)  no-repeat');
		$('#textinput').css('background','url(/images/input_out.gif)  no-repeat');
	});
	$('#textinput2').mousedown(function(){
		$('#textinput2').css('background','url(images/input_in.gif)  no-repeat');
		$('#textinput').css('background','url(images/input_out.gif)  no-repeat');
	});
	$('#textinput').mousedown(function(){
		$('#textinput').css('background','url(images/input_in.gif)  no-repeat');
		$('#textinput2').css('background','url(images/input_out.gif)  no-repeat'); 
	});
		
	

	$('input#showO, input#showV , input#minContigs').change(function(){
		textInputs();
	});
	/*var Oselect = $('input[@id=showO]:checked').length != 0;
	var Vselect = $('input[@id=showV]:checked').length != 0;
	if(Oselect == true && Vselect == false ){
		textInputs();
	}
	else if(Oselect == false && Vselect == true ){
		textInputs();
	}*/
	
/*	hoverEffects();
	buttonHovers();
*/
}
function checkKunique(){
	var pars8 = $('#textB1').val();
	makeCall('checkunique.php','oid='+pars8+'','kuniques');
}
function showResponseUnique(originalRequestUni) {
	$('#kuniques').empty();
	$("#kuniques").append(originalRequestUni);
}
function narrowSearch(str){
	var q='#textinput';
	loadingBlock(q);
	makeCall('getspecies.php','action=showall&show=All&textBox=textB1&str='+str,q);
	
}
function textInputs(q){
	var Oselect = $('input[@id=showO]:checked').length != 0;
	var Vselect = $('input[@id=showV]:checked').length != 0;
	var minContigs = $('input#minContigs').val();
	if (!minContigs){minContigs = 'none';}
	if(q == 'all'){q = '#textinput, #textinput2';}else{q='#textinput';}
	if(Oselect == true && Vselect == false ){
		loadingBlock(q);
		makeCall('getspecies.php','action=showall&show=showO&textBox=textB1&minContigs='+minContigs+'',q);
	}
	else if(Oselect == false && Vselect == true ){
		loadingBlock(q);
		makeCall('getspecies.php','action=showall&show=showV&textBox=textB1&minContigs='+minContigs+'',q);
	}
	else {
		loadingBlock(q);
		makeCall('getspecies.php','action=showall&show=All&textBox=textB1&minContigs='+minContigs+'',q);
	}

}
function loadingBlock(id){
 $(id).block('&nbsp;', { background: 'transparent url(/images/loading8.gif) center center no-repeat',height: '50px', width: '50px' });

}

function loadingBlocks(id){
 var msg = "Updating results";
 var offsetTop = '130px';

  // Blocking causes IE 6 to freeze up, so, don't do blocking for IE6
  if($.browser.msie && $.browser.version == '6.0'){
 	//$(id).block(msg, { background: 'transparent url(/images/loading8.gif) center center no-repeat',height: '50px', width: '50px' });
	//return '';
  }

$(id).block('<div id="updating"><img src="/images/busy.gif" alt="busy"> '+msg+'...<br><a onclick="doAbort(\''+id+'\');" style="cursor:pointer;margin-top:7px" id="cancelB"><img src="/images/cancel.gif" alt="Cancel"></a><br><br></div>', { background: '#FFF',height: '40px', width: '250px', border: '1px solid #AAA', paddingTop: '10px',paddingBottom: '15px',textAlign:'center',marginTop: '1px', marginLeft: '1px', offsetTop: offsetTop });
}

function doAbort(id){
	if(ajaxHandle){ajaxHandle.abort(); unloadingBlock(id);}
	if ($.browser.msie) {
		$('#cancelB').click (function () {if(id == '#status2'){$('#status2').css('margin-bottom','0px'); $('#status2').css('height','auto');}});
	}
}

function unloadingBlock(id){ $(id).unblock(); }

var hovers = new Array();
var buttons = new Array();
function hoverEffects() {
	//get all elements (text inputs, passwords inputs, textareas)
	var elements = document.getElementsByTagName('input');
	var j = 0;
	for (var i4 = 0; i4 < elements.length; i4++) {
		if((elements[i4].type=='text')||(elements[i4].type=='password')) {
			hovers[j] = elements[i4];
			++j;
		}
	}
	elements = document.getElementsByTagName('textarea');
	for (var i4 = 0; i4 < elements.length; i4++) {
		hovers[j] = elements[i4];
		++j;
	}
	
	//add focus effects
	for (var i4 = 0; i4 < hovers.length; i4++) {
		hovers[i4].onfocus = function() {this.className += "Hovered";}
		hovers[i4].onblur = function() {this.className = this.className.replace(/Hovered/g, "");}
	}
}

function buttonHovers() {
	//get all buttons
	var elements = document.getElementsByTagName('input');
	var j = 0;
	for (var i5 = 0; i5 < elements.length; i5++) {
		if(elements[i5].type=='submit' || elements[i5].type=='reset' || elements[i5].type=='button' ) {
			buttons[j] = elements[i5];
			++j;
		}
	}
	
	//add hover effects
	for (var i5 = 0; i5 < buttons.length; i5++) {
		buttons[i5].onmouseover = function() {this.className += "Hovered";}
		buttons[i5].onmouseout = function() {this.className = this.className.replace(/Hovered/g, "");}
	}
}

function makeCall(url,params,id){
	var type = "GET";
	if(id == '#status' || id == '#status2'){ 
		type = "POST";
	}
	if(id == '#status' || id == '#status2' || id == 'showResponsePopTree' || id == 'showResponsePop'){ 
		if(ajaxHandle){ajaxHandle.abort();}
	}
	ajaxHandle = $.ajax({
         	 type: type,
         	 //timeout: 5000,
		 url: url, 
		 data: params,
		 cache: true,
		
		 dataType: "html",
         	 success: function(response){
				if($(id).is('#textinput') || $(id).is('#textinput, #textinput2')){showVO(response,id);}
				if(id == 'showResponsePopTree'){showResponsePopTree(response);}
				if(id == 'showResponsePop'){showResponsePop(response);}
				if(id == '#status'){showSigs(response,'#status');}
				if(id == '#status2'){showSigs2(response,'#status2');}
				if(id == 'kuniques'){showResponseUnique(response);}

			  }
        });
}
function showSigs2(msg,id){
    $(id).empty();
    $(id).append(msg);
    unloadingBlock(id);
    if ($.browser.msie) {
	$('#status2').css('height','auto');
    }
    if($('#dropdown').val() == 'graph') {
	    gV=new gView("",""+suffix+"",""+gV_min_s+""); 
	    $(document).ready(function() {gV.onPageLoad(); makeContigSwitcher();});
	    //addLoadEvent(gV.onPageLoad);
    }
}
function makeContigSwitcher(){
	var c = 0;
        var p = '<div id="nextContig">';
        for (i in contigArray) { 
		p += "<a href=\"javascript://\" onclick=\"nextContig('"+contigArray[i]+"')\">View signatures on contig "+ i +"</a>&nbsp;&nbsp|&nbsp;&nbsp" ;
		c++;
        };
 	p += "</div>";
	if(c > 1){$('#status2').append(p);}
}
function addLoadEvent(func) {
	var oldOnload = window.onload;
	if (typeof window.onload != 'function') {
	   window.onload = func;
	}
	else {
	   window.onload = function() {
		   oldOnload();
		   func();
	   }
	}
}
function highlightFeature(id){
	var k = document.getElementById('sig_btt');
	if (k){$('#sig_btt').remove();}
	if(old_id){if(old_color){$('#'+old_id+' td').css("background-color",old_color);}else{$('#'+old_id+' td').css("background-color",'#FFFFFF');}}
	
	var f = id.match(/Signature\_\d+\_(.*)/);
	if(f != null ) {
		var new_id = "sig_"+f[1];
		if(old_id && old_id != new_id){if(old_color){$('#'+old_id+' td').css("background-color",old_color);}else{$('#'+old_id+' td').css("background-color",'#FFFFFF');}}
		old_color = $('#'+new_id+' td').css("background-color");
		$('#'+new_id+' td').css("background-color",'#FFD563');
		$('#rLeft').append('<div id="sig_btt"><div><img src="/images/backtotop1.gif" id="backtotop" onclick="doScroll(\'#rLeft\')" style="padding:0"></div>');
		var p = $("tr#"+new_id+" td:first");
		var offset = p.offset();
		$('#rLeft #sig_btt').css({top:offset.top + 5 +'px',left:offset.left - 80+'px',position:'absolute'});
		old_id = new_id;
	}

}
function doScroll(id){
	var f = id.match(/Signature\_\d+\_(.*)/);
	
	if(f != null ) {
		var new_id = "sig_"+f[1];
		$('#'+new_id+'').scrollTo(1000);
		old_id = new_id;
	}else{
		$(id).scrollTo(1000);
	}
}

function showSigs(msg,id){
	$(id).empty();
        $(id).append(msg);
	unloadingBlock(id);

	$("#tableT").tablesorter().tablesorterPager({container: $("#pager"), size:100});
	$("#backtotop").click(function(){ doScroll('#rLeft'); });
	/*$('input#selectAll').click(function() {
		var allSelect = $('input[@id=selectAll]:checked').length != 0;
		if(allSelect == true  ){
			$('table#tableT input').each(function(){this.checked=true});
		}else {$('table#tableT input').each(function(){this.checked=false}); }
	});*/
	doScroll('#rLeft');
	$("input#selectAll").click(function(){
			var checked_status = this.checked;
			$("input[@name=GENE]").each(function(){
					 this.checked = checked_status;
			});
	 });
	if ($('#status').css('height') == '100px'){ $('#status').css('height','auto');}
}
function showVO(msg,el) {
	setTimeout("finishAjax('"+el+"', '"+escape(msg)+"')");
}
function finishAjax(id, response) {
     $(id).empty();
     $(id).append(unescape(response));
     unloadingBlock(id);
} //finishAjax


function populate2nd () {
	//var secondBox = $('input#pop:checked');
	var secondBox = $('input[@id=pop1]:checked').length != 0;
	if (secondBox == true && $('#textinput2').is(":hidden")){ showAll();}
	else if(secondBox == false){genus(); }
}
function populate1st(sv) {
	var urlPop2 = 'getspecies.php?action=showall&show='+sv+'&textBox=textB1';
	var myAjaxPop1 = new Ajax.Request( urlPop2, {method: 'get', onComplete: showResponsePop1} );
}
function showResponsePop1 (originalRequestPop1) {
	var newDataPop1 = originalRequestPop1.responseText;
	$('textinput').innerHTML = newDataPop1;
}

function showAll() {
	var pars5 = $('#textB1').val();
	if($('#tree').is(":hidden")){loadingBlock('#textinput2');}else{loadingBlock('#tree');}
	makeCall('getspecies.php','action=showall&oid='+pars5+'&textBox=textB2','showResponsePop');
}
function showResponsePop (newDataPop) {
	$('#textinput2').show();
	$('#tree').hide();
	$('#tree').empty();
	$('#textinput2').empty();
	$("#textinput2").append(newDataPop);
	if($('#tree').is(":hidden")){unloadingBlock('#textinput2');}else{unloadingBlock('#tree');}
	doScroll('#textinput2');
}
function showResponsePopTree (newDataPopTree) {
	$('#textinput2').hide();
	$('#tree').show();
	$('#tree').empty();
	$('#textinput2').empty();
	$("#tree").append(newDataPopTree);
	$("#XRoot").treeview({ control: "#treecontrol", store: true});
	$("#tree, #tree ul").css('font-size','11px');
	$("#tree ul li,#XRoot.treeview li").css('padding-top','0px');
	$("#tree ul li").css('font-family','Verdana, Arial, Helvetica, sans-serif');
	if($('#textinput2').is(":hidden")){unloadingBlock('#tree');}else{unloadingBlock('#textinput2');}
	doScroll('#tree');
}

function genus() {
	var parsTree = $('#textB1').val();
	if(parsTree != null){
		if($('#textinput2').is(":hidden")){loadingBlock('#tree');}else{loadingBlock('#textinput2');}
		makeCall('tree.php','oid='+parsTree,'showResponsePopTree');
	}
}

/*
 * Queued Ajax requests.
 * A new Ajax request won't be started until the previous queued 
 * request has finished.
 */
 var pendingRequests = {};
 
jQuery.ajaxQueue = function(o){
	var _old = o.complete;

	o.complete = function(){
		if ( _old ) _old.apply( this, arguments );
		jQuery([jQuery.ajaxQueue]).dequeue(  "ajax" );
	};

	jQuery([ jQuery.ajaxQueue ]).queue("ajax", function(){
		jQuery.ajax( o );
	});
};

/*
 * Synced Ajax requests.
 * The Ajax request will happen as soon as you call this method, but
 * the callbacks (success/error/complete) won't fire until all previous
 * synced requests have been completed.
 */
 /*
jQuery.ajaxSync = function(o){
	var fn = jQuery.ajaxSync.fn, data = jQuery.ajaxSync.data, pos = fn.length;
	
	fn[ pos ] = {
		error: o.error,
		success: o.success,
		complete: o.complete,
		done: false
	};

	data[ pos ] = {
		error: [],
		success: [],
		complete: []
	};

	o.error = function(){ data[ pos ].error = arguments; };
	o.success = function(){ data[ pos ].success = arguments; };
	o.complete = function(){
		data[ pos ].complete = arguments;
		fn[ pos ].done = true;

		if ( pos == 0 || !fn[ pos-1 ] )
			for ( var i = pos; i < fn.length && fn[i].done; i++ ) {
				if ( fn[i].error ) fn[i].error.apply( jQuery, data[i].error );
				if ( fn[i].success ) fn[i].success.apply( jQuery, data[i].success );
				if ( fn[i].complete ) fn[i].complete.apply( jQuery, data[i].complete );

				fn[i] = null;
				data[i] = null;
			}
	};

	return jQuery.ajax(o);
};

jQuery.ajaxSync.fn = [];
jQuery.ajaxSync.data = [];
*/

jQuery.fn.extend({
  scrollTo : function(speed, easing) {
    return this.each(function() {
      var targetOffset = $(this).offset().top;
      $('html,body').animate({scrollTop: targetOffset}, speed, easing);
    });
  }
});



function SetAllCheckBoxes(FormName, FieldName, CheckValue)
{
	if(!document.forms[FormName])
		return;
	var objCheckBoxes = document.forms[FormName].elements[FieldName];
	if(!objCheckBoxes)
		return;
	var countCheckBoxes = objCheckBoxes.length;
	if(!countCheckBoxes)
		objCheckBoxes.checked = CheckValue;
	else
		// set the check value for all check boxes
		for(var i = 0; i < countCheckBoxes; i++)
			objCheckBoxes[i].checked = CheckValue;
}
function toggletree (action){
	var divs = document.getElementsByTagName("ul");
	for (var i=0;i<divs.length;i++) {
		if (/^Xtree/.test(divs[i].id)) {
			var div = divs[i].id;
			if (action == 'expand'){
				//$(''+div+'').style.display = "block";
				$('#'+div).show();
			}
			else{
				//$(''+div+'').style.display = "none";
				$('#'+div).hide();
			}
		}
	}
	swapTI(action);
}
function swapTI (action){
	var divs = document.getElementsByTagName("img");
	for (var i=0;i<divs.length;i++) {
		if (/^Ximg/.test(divs[i].id)) {
			var div = divs[i];
			var div_id = divs[i].id;
			var src = div.src;
			if(src.match(/images\/doc\.gif/)){}else{
				if (action == 'expand'){
					xSwapImg(document.getElementById(''+div_id+''),'http://insignia.cbcb.umd.edu/images/folderclose.gif','http://insignia.cbcb.umd.edu/images/folderopen.gif');
				}
				else {
					xSwapImg(document.getElementById(''+div_id+''),'http://insignia.cbcb.umd.edu/images/folderopen.gif','http://insignia.cbcb.umd.edu/images/folderclose.gif');
				}
			}
		}
	}
}


function showTab(id,index){
	for (var i = 1; i<=2;i++){
		var tab = document.getElementById(''+id+''+i+'');
		if (i == index){
			tab.style.display = 'block';
			classChange(document.getElementById(id+'tab'+i+''),'active','noclass'); 
		}
		else{
			tab.style.display = 'none';
			classChange(document.getElementById(id+'tab'+i+''),'noclass','active');
		}
	}
}
function classChange(elem,addClass,remClass) { 
    if (!elem.className) elem.className = ''; 
    var clsnm = elem.className; 
    if (addClass && !clsnm.match(RegExp("\\b"+addClass+"\\b"))) clsnm = clsnm.replace(/(\S$)/,'$1 ')+addClass; 
    if (remClass) clsnm = clsnm.replace(RegExp("(\\s*\\b"+remClass+"\\b(\\s*))*","g"),'$2'); 
    elem.className=clsnm; 
}

var popUpWin=0;
function popUpWindow(URLStr, left, top, width, height)
{
  if(popUpWin)
    {
      if(!popUpWin.closed) popUpWin.close();
    }
  popUpWin = open(URLStr, 'popUpWin', 'toolbar=no,location=no,directories=no,status=no,menub ar=no,scrollbars=yes,resizable=yes,copyhistory=yes,width='+width+',height='+height+',left='+left+', top='+top+',screenX='+left+',screenY='+top+'');
}

