jQuery(document).ready( function()
{
	$ = jQuery;


   /**
    *  For sub-menu
    */
	var timeout    = 500;
	var closetimer = 0;
	var ddmenuitem = 0;

	function ddm_open()
	{
		ddm_canceltimer();
   		ddm_close();
   		ddmenuitem = $(this).find( 'ul' ).css( 'visibility', 'visible' );
	}

	function ddm_close()
	{
		if ( ddmenuitem ) ddmenuitem.css( 'visibility', 'hidden' );
	}

	function ddm_timer()
	{
		closetimer = window.setTimeout( ddm_close, timeout );
	}

	function ddm_canceltimer()
	{
		if( closetimer )
		{
			window.clearTimeout( closetimer );
      		closetimer = null;
		}
	}

	$( '#geo_nav_bar > li' ).bind( 'mouseover', ddm_open );
	$( '#geo_nav_bar > li' ).bind( 'mouseout', ddm_timer );

	document.onclick = ddm_close;


   /**
    *  For number formatting
    */
	function addCommas( nStr )
	{
		nStr += '';
		var x = nStr.split('.');
		var x1 = x[0];
		var x2 = x.length > 1 ? '.' + x[1] : '';
		var rgx = /(\d+)(\d{3})/;

		while ( rgx.test( x1 ) )
		{
			x1 = x1.replace( rgx, '$1' + ',' + '$2' );
		}
		return x1 + x2;
	}


   /**
    *  Error message
    */
	function show_err_msg()
	{
		var err_msg = '<p class="err_msg">The GEO database is down at this moment. We are working to restore the database availability as soon as possible.<br><br>If you have any questions, please write to <a href="mailto:geo@ncbi.nlm.nih.gov?subject=GEO Database is down">geo@ncbi.nlm.nih.gov</a><br><br>We apologize for this temporary inconvenience.</p>';

		// console.info( "Error: " + err_msg );

		$( '#geo_descr' ).hide().after( err_msg ).slideDown();
	}


   /**
	*  Help messages (from templates/help_def_messages.js)
    */
	var query_datasets_msg = "Enter search term(s) to locate GEO Series, DataSets, or Platforms of interest. Search for experiment keywords, authors, etc";
	var query_gene_gene_profiles_msg = "Enter search term(s) to locate and view individual, DataSet-specific, gene expression profiles of interest. Search for gene names, gene symbols, experiment keywords, etc";
	var query_geo_accession_msg = "Retrieve a specific record by entering a valid GEO accession number (GPLxxx, GSMxxx, GSExxx, GDSxxx)";
	var query_geo_blast_msg = "Query for gene expression profiles of interest based on nucleotide sequence similarity";
	var browse_datasets_msg = "Browse GEO DataSet, Series and Platform records";
	var browse_geo_accessions_msg = "Browse GEO's public collection of submitter-supplied Platform, Sample, or Series records";
	var browse_geo_accessions_platforms_msg = "A GEO Platform record describes array specifications and/or defines the set of elements that may be detected and quantified in an experiment";
	var browse_geo_accessions_samples_msg = "A GEO Sample record details biological source characteristics, experimental parameters, and the derived gene expression measurements for each element on the array";
	var browse_geo_accessions_series_msg = "A GEO Series record defines a set of related Samples and provides a focal point and overall summary description of a study";

	var new_submission_link = '<a href="/geo/info/submission.html" class="button" title="Instructions for making new data deposits">New submission</a>';
	var update_link = '<a href="/geo/info/update.html" class="button" title="Instructions for performing updates to existing records">Update</a>';
	var new_account_link = '<a href="/geo/submission/geosubmi.cgi?mode=new" class="button">New account</a>';
	var deposit_update = '<ul class="sidebar_links"><li>' + new_submission_link + '</li><li>' + update_link + '</li></ul>';

	var view_account_link = '<a href="submission/geosubmi.cgi?mode=show" class="button" title="View your account. You can also edit your account. If you want to create an entirely new account, please logout first.">View my account</a>';
	// var old_view_account_link = '<a href="submission/geosubmi.cgi?mode=show" onMouseOver="changpics(view_account_pix, view_account_a)" onMouseOut="changpics(view_account_pix, view_account_noa)"><img src="img/buttons/view_myaccount_noa.gif" alt="" width="140" height="24" border="0" onMouseOver="onLinkOver(\'HelpMessage\' , submit_view_account_msg)" onMouseOut="onLinkOut(\'HelpMessage\' , geo_default_help)" name="view_account_pix"></a>';

	var view_submissions_link = '<a href="query/browse.cgi" class="button" name="view_submissions_pix" title="View your submissions">My submissions</a>';
	// var old_view_submissions_link = '<a href="query/browse.cgi" onMouseOver="changpics(view_submissions_pix, view_submissions_a)" onMouseOut="changpics(view_submissions_pix, view_submissions_noa)"><img src="img/buttons/my_submissions_noa.gif" alt="" width="140" height="24" border="0" onMouseOver="onLinkOver(\'HelpMessage\' , submit_view_submissions_msg)" onMouseOut="onLinkOut(\'HelpMessage\' , geo_default_help)" name="view_submissions_pix"></a>';

	var submitter_links = '<table id="submitter_links"><tr><td>' +
							new_submission_link + '</td><td>' +
							view_submissions_link + '</td></tr><tr><td>' +
							update_link + '</td><td>' +
							view_account_link + '</td></tr></table>';

   /**
    *  If logged in, show login status and update links.
    */
	$.post( "/geo/query/geoinfo.cgi",
    {
		mode: "getloggeduser"
	},
    function( data )
    {
        var isLoggedIn = data.GEO_Info.submitter.role != "anonymous";
        var name = isLoggedIn ? data.GEO_Info.submitter.name : "johndoe";

       /**
        *  Update breadcrumb to GEO/Test for dev site.
        */
        $( "#curr_page" ).html( data.GEO_Info.connection.type == "debug" ? "GEO/Test" :
                          (data.GEO_Info.connection.type == "any" ? data.GEO_Info.connection.server : "GEO"));

        if( isLoggedIn )
        {
			// Login
            $( "#login_status" ).html( 'User: <a href="/geo/submission/geosubmi.cgi?mode=show">' + name + '</a> | <a href="/geo/query/browse.cgi">My submissions</a> | <a href="/geo/submission/geosubmi.cgi?mode=logout&rix=1">Logout</a>' );

			// Site contents
			$( "#deposit_update" ).html( deposit_update );

			// Submit
			$( "#submit-tab" ).html( "Submitter: " + name );
			$( "#submit-logged_in" ).html( submitter_links );
        }
    }, "json");


   /**
    *  Get Public data counts or show error message.
    */
	$.ajax(
	{
		url: "/geo/query/geoinfo.cgi",
		data: { mode: "getpubliccounts" },
		dataType: "json",

		success: function( data )
		{
			var gpl_cnt = data.GEO_Info.all_counts.public.platforms;
			var gsm_cnt = data.GEO_Info.all_counts.public.samples;
			var gse_cnt = data.GEO_Info.all_counts.public.series;

			var tot_cnt = gpl_cnt + gsm_cnt + gse_cnt;

			if( gpl_cnt > 0 ) $( '#gpl-cnt a' ).text( addCommas( gpl_cnt ) );
			if( gsm_cnt > 0 ) $( '#gsm-cnt a' ).text( addCommas( gsm_cnt ) );
			if( gse_cnt > 0 ) $( '#gse-cnt a' ).text( addCommas( gse_cnt ) );
			// if( tot_cnt > 0 ) $( '#tot-cnt a' ).text( addCommas( tot_cnt ) );

			if( tot_cnt <= 0 ) show_err_msg();
		},

		error: function()
		{
			show_err_msg();
		}
	});

});


