var keyword = '';
var type = 'all';
var organism = 'NC_000913';
var blastmode = 0;
var sequence = '';

App = function(){

        var layout;

        return {
            init : function(){
               layout = new Ext.BorderLayout(document.body, {
                    north: {
                        split:false,
                        initialSize: 51,
                        titlebar: false
                    },
                    west: {
                        split:true,
                        initialSize: 350,
                        minSize: 100,
                        maxSize: 600,
                        titlebar: true,
                        collapsible: true,
       	                animate: true,
			autoScroll:true
                    },
                    south: {
                        split:true,
                        initialSize: 50,
                        minSize: 50,
                        maxSize: 200,
                        titlebar: true,
                        collapsible: true,
               	        animate: true
                    },
                    center: {
                        titlebar: true,
                        autoScroll:false,
                        closeOnTab: true,
			tabPosition: 'top'
                    }
              });

              layout.beginUpdate();
	      layout.add('north', new Ext.ContentPanel('north', 'North'));
	      layout.add('south', new Ext.ContentPanel('south', {title: 'Information Window', closable: false}));
	      layout.add('west', new Ext.ContentPanel('west', {title: 'Genomes'}));
	      var center1 = new Ext.ContentPanel('center1', {title: 'Circular Genome Map', closable: false})
	      var center2 = new Ext.ContentPanel('center2', {title: 'Genome Map', closable: false})
	      var center3 = new Ext.ContentPanel('center3', {title: 'Pathway View', closable: false})
	      var center4 = new Ext.ContentPanel('center4', {title: 'DNA Walk', closable: false})
	      layout.add('center', center1);
	      layout.add('center', center2);
	      layout.add('center', center3);
	      layout.add('center', center4);

	      center1.addListener('activate', function(){
			if(Ext.get('plasmidmap-iframe').dom.src == ''){
				Ext.get('plasmidmap-iframe').dom.src = 'PlasmidMap/?organism=' + organism + '&query=' + keyword + '&type=' + type + '&blast=' + blastmode;
			}
	      }); 

	      center2.addListener('activate', function(){
			if(Ext.get('genomemap-iframe').dom.src == ''){
				Ext.get('genomemap-iframe').dom.src = 'GenomeMap/?organism=' + organism + '&query=' + keyword + '&type=' + type + '&blast=' + blastmode;
			}
	      }); 

	      center3.addListener('activate', function(){
			if(Ext.get('pathwaymap-iframe').dom.src == ''){
				Ext.get('pathwaymap-iframe').dom.src = 'PathwayMap/?organism=' + organism + '&query=' + keyword + '&type=' + type + '&blast=' + blastmode;
			}
	      }); 

	      center4.addListener('activate', function(){
			if(Ext.get('dnawalk-iframe').dom.src == ''){
				Ext.get('dnawalk-iframe').dom.src = 'DNAWalk/?organism=' + organism + '&query=' + keyword + '&type=' + type + '&blast=' + blastmode;
	                }
	      }); 

	      layout.getRegion('center').showPanel('center1');
	      layout.restoreState();
	      layout.endUpdate();

	     // safari and opera have iframe sizing issue, relayout fixes it
	      if(Ext.isSafari || Ext.isOpera){
			layout.layout();
	      }
		
              var tree = new Ext.tree.TreePanel('west', {
	                animate:true, 
	                enableDD:false,
	                containerScroll: true,
	                rootVisible:true,
			loader: new Ext.tree.TreeLoader({
				dataUrl:'getNodes.cgi'
			})
	      });

	      var root = new Ext.tree.AsyncTreeNode({
			draggable:false,
		        text: 'Bacteria', 
			id: 'Bacteria'
	      });

	      tree.setRootNode(root);
	      tree.render();         
	      root.expand();    


              tree.on('dblclick', function(n){
                    if(n.isLeaf()){
			n.select();
                    }
              });

              tree.on('click', function(n){
                    if(n.isLeaf()){
			var text = n.id.match(/\/(.*)/);
			organism = text[1];

			if(blastmode){
			        var ajax = Ext.lib.Ajax.request('POST', 'blast/runblast.cgi', {
                	    		success: function(req, args){
		               			if(req.responseText){
							layout.getRegion('center').getPanel('center1').setTitle('Circular Genome Map (' + req.responseText + ')');
							layout.getRegion('center').getPanel('center2').setTitle('Genome Map (' + req.responseText + ')');
							layout.getRegion('center').getPanel('center3').setTitle('Pathway Map (' + req.responseText + ')');
							layout.getRegion('center').getPanel('center4').setTitle('DNAWalk Map (' + req.responseText + ')');

							Ext.get('plasmidmap-iframe').dom.removeAttribute('src');
							Ext.get('genomemap-iframe').dom.removeAttribute('src');
							Ext.get('pathwaymap-iframe').dom.removeAttribute('src');
							Ext.get('dnawalk-iframe').dom.removeAttribute('src');

							layout.getRegion('center').getActivePanel().fireEvent('activate');
				                }
			                },
				     },
				     'seq=' + sequence + '&rand=' + keyword + '&organism=' + organism
	        	        );	
			}else{

				Ext.get('plasmidmap-iframe').dom.removeAttribute('src');
				Ext.get('genomemap-iframe').dom.removeAttribute('src');
				Ext.get('pathwaymap-iframe').dom.removeAttribute('src');
				Ext.get('dnawalk-iframe').dom.removeAttribute('src');

				layout.getRegion('center').getActivePanel().fireEvent('activate');
	
				if(keyword.length < 1){
					layout.getRegion('center').getPanel('center1').setTitle('Circular Genome Map');
					layout.getRegion('center').getPanel('center2').setTitle('Genome Map');
					layout.getRegion('center').getPanel('center3').setTitle('Pathway Map');
					layout.getRegion('center').getPanel('center4').setTitle('DNAWalk Map');
				}else{
				        var ajax = Ext.lib.Ajax.request('GET', 'PlasmidMap/info.cgi?task=num&organism=' + organism + '&query=' + keyword + '&type=' + type, {
	                       			success: function(req, args){
	                  				if(req.responseText){
								layout.getRegion('center').getPanel('center1').setTitle('Circular Genome Map (' + req.responseText + ')');
				                	}
			                	}
		                	});
			        	var ajax = Ext.lib.Ajax.request('GET', 'GenomeMap/info.cgi?task=num&organism=' + organism + '&query=' + keyword + '&type=' + type, {
	                       			success: function(req, args){
	                  				if(req.responseText){
								layout.getRegion('center').getPanel('center2').setTitle('Genome Map (' + req.responseText + ')');
				                	}
			                	}
		                	});
			        	var ajax = Ext.lib.Ajax.request('GET', 'PathwayMap/info.cgi?task=num&organism=' + organism + '&query=' + keyword + '&type=' + type, {
	                       			success: function(req, args){
	                  				if(req.responseText){
								layout.getRegion('center').getPanel('center3').setTitle('Pathway Map (' + req.responseText + ')');
				                	}
			                	}
		                	});
			        	var ajax = Ext.lib.Ajax.request('GET', 'DNAWalk/info.cgi?task=num&organism=' + organism + '&query=' + keyword + '&type=' + type, {
	                       			success: function(req, args){
	                  				if(req.responseText){
								layout.getRegion('center').getPanel('center4').setTitle('DNAWalk Map (' + req.responseText + ')');
				                	}
			                	}
			                });
				}

				return false;
                	    }
		       }
              	});

	      root.on('expand', function(n){
			tree.getNodeById('Bacteria/NC_000913').select();
	      });
	     

              function searchSubmit(){
			keyword = Ext.get('query').dom.value;
			Ext.get('plasmidmap-iframe').dom.removeAttribute('src');
			Ext.get('genomemap-iframe').dom.removeAttribute('src');
			Ext.get('pathwaymap-iframe').dom.removeAttribute('src');
			Ext.get('dnawalk-iframe').dom.removeAttribute('src');

			layout.getRegion('center').getActivePanel().fireEvent('activate');

		        var ajax = Ext.lib.Ajax.request('GET', 'PlasmidMap/info.cgi?task=num&organism=' + organism + '&query=' + keyword + '&type=' + type, {
                       		success: function(req, args){
                  			if(req.responseText){
						layout.getRegion('center').getPanel('center1').setTitle('Circular Genome Map (' + req.responseText + ')');
			                }
		                }
	                });
		        var ajax = Ext.lib.Ajax.request('GET', 'GenomeMap/info.cgi?task=num&organism=' + organism + '&query=' + keyword + '&type=' + type, {
                       		success: function(req, args){
                  			if(req.responseText){
						layout.getRegion('center').getPanel('center2').setTitle('Genome Map (' + req.responseText + ')');
			                }
		                }
	                });
		        var ajax = Ext.lib.Ajax.request('GET', 'PathwayMap/info.cgi?task=num&organism=' + organism + '&query=' + keyword + '&type=' + type, {
                       		success: function(req, args){
                  			if(req.responseText){
						layout.getRegion('center').getPanel('center3').setTitle('Pathway Map (' + req.responseText + ')');
			                }
		                }
	                });
		        var ajax = Ext.lib.Ajax.request('GET', 'DNAWalk/info.cgi?task=num&organism=' + organism + '&query=' + keyword + '&type=' + type, {
                       		success: function(req, args){
                  			if(req.responseText){
						layout.getRegion('center').getPanel('center4').setTitle('DNAWalk Map (' + req.responseText + ')');
			                }
		                }
	                });

			return false;
              }

	      Ext.get('searchform').on('submit', function(e){
			searchSubmit();
			blastmode = 0;
	      });


	function runBlast(btn, msg){
	     if(msg){
		blastmode = 1;
		var rand = parseInt(Math.random() * 10000000000);
	        keyword = rand;
		sequence = msg;

	        var ajax = Ext.lib.Ajax.request('POST', 'blast/runblast.cgi', {
                    		success: function(req, args){
		               			if(req.responseText){
							layout.getRegion('center').getPanel('center1').setTitle('Circular Genome Map (' + req.responseText + ')');
							layout.getRegion('center').getPanel('center2').setTitle('Genome Map (' + req.responseText + ')');
							layout.getRegion('center').getPanel('center3').setTitle('Pathway Map (' + req.responseText + ')');
							layout.getRegion('center').getPanel('center4').setTitle('DNAWalk Map (' + req.responseText + ')');

							Ext.get('plasmidmap-iframe').dom.removeAttribute('src');
							Ext.get('genomemap-iframe').dom.removeAttribute('src');
							Ext.get('pathwaymap-iframe').dom.removeAttribute('src');
							Ext.get('dnawalk-iframe').dom.removeAttribute('src');

							layout.getRegion('center').getActivePanel().fireEvent('activate');
				                }
			                },
				},
				'seq=' + msg + '&rand=' + rand + '&organism=' + organism
	        );

	     }
	}

	     function resetbuttons(){
		Ext.get('b-all').dom.src='pict/buttons/b-all-n.png';
		Ext.get('b-cds').dom.src='pict/buttons/b-cds-n.png';
		Ext.get('b-trna').dom.src='pict/buttons/b-trna-n.png';
		Ext.get('b-rrna').dom.src='pict/buttons/b-rrna-n.png';
	     }

	     Ext.get('b-all').on('click', function(e){
		  resetbuttons();
     		  Ext.get('b-all').dom.src='pict/buttons/b-all-p.png';
		  type = 'all';
    		  searchSubmit();
  	     });
	     Ext.get('b-cds').on('click', function(e){
		  resetbuttons();
     		  Ext.get('b-cds').dom.src='pict/buttons/b-cds-p.png';
		  type = 'CDS';
    		  searchSubmit();
  	     });
	     Ext.get('b-trna').on('click', function(e){
		  resetbuttons();
     		  Ext.get('b-trna').dom.src='pict/buttons/b-trna-p.png';
		  type = 'tRNA';
    		  searchSubmit();
  	     });
	     Ext.get('b-rrna').on('click', function(e){
		  resetbuttons();
     		  Ext.get('b-rrna').dom.src='pict/buttons/b-rrna-p.png';
		  type = 'rRNA';
    		  searchSubmit();
  	     });
	     Ext.get('blastbutton').on('click', function(e){
		        Ext.MessageBox.show({
				           title: 'BLAST Search',
				           msg: 'Input your sequence for BLAST query:',
				           width:500,
				           buttons: {ok:'Submit query', cancel:'Cancel'},
				           multiline: true,
				           fn: runBlast
		       });
		});		  


	      var loading = Ext.get('loading');
	      var mask = Ext.get('loading-mask');
	      mask.setOpacity(.8);
	      mask.fadeOut({
			duration:2,
			endOpacity:0,
			easing:"easeIn",
			remove:true,
			callback : function(){
				loading.fadeOut({duration:1,remove:true});
			}
              });

	     // for the bug in FF3
	      setTimeout(function(){
				Ext.get('plasmidmap-iframe').dom.removeAttribute('src');
				Ext.get('genomemap-iframe').dom.removeAttribute('src');
				Ext.get('pathwaymap-iframe').dom.removeAttribute('src');
				Ext.get('dnawalk-iframe').dom.removeAttribute('src');

				layout.getRegion('center').getActivePanel().fireEvent('activate');
			}, 10);



	 }

    };

       
}();

Ext.EventManager.onDocumentReady(App.init, App, true);


