// data.js

var UNDEF='undefined';
var jsonScriptId=0;

function getGoogleData(jq)
{

  jsonScriptId++;
  if (typeof jq.type == UNDEF) jq.type = 'spreadsheet';
  if (typeof jq.callback == UNDEF) jq.callback = 'handleGoogleData'; 

  var id = 'jsonScript' + jsonScriptId;

  if (jq.type == 'spreadsheet'){

    if (typeof jq.wsid == UNDEF) jq.wsid = 'od6';	 // worksheet id

    var url = 'http://spreadsheets.google.com/feeds/list'
		+ '/' + jq.ssid + '/' + jq.wsid +  '/public/values'
                + '?alt=json-in-script&callback=' + jq.callback;

    if (typeof jq.orderby != UNDEF) { 
		url += '&orderby=column:' + jq.orderby;

		var dir = jq.direction;
    		if (typeof dir != UNDEF) {
			if (dir == 'za') dir = 'true'; else dir = 'false';
			url += '&reverse=' + dir;
		}

    		if (typeof jq.reverse != UNDEF) 
			url += '&reverse=' + jq.reverse;
    }
	
    if (typeof jq.sq != UNDEF){      
		// have not been able to get this to work ??
		url += '&sq=' + jq.sq;
   }
  }
  else if (jq.type == 'calendar'){

	var url = jq.url
		+ '?alt=json-in-script'
		+ '&callback=' + jq.callback
		+ '&futureevents=true'
		+ '&orderby=starttime'
		+ '&sortorder=ascending'
		+ '&max-results=999';
  }
  else { 
	alert('unrecognized GoogleData type ['+jq.type + ']');
	return;
  }


  var script = document.createElement('script');
  script.setAttribute('src', url);
  script.setAttribute('id', id);
  script.setAttribute('type', 'text/javascript');
  document.documentElement.firstChild.appendChild(script);
}


// -- functions to handle retrieved data items

var gdata;	// global to help w/firebug debugging


function handleProjectList(root)
{
	gdata = root;
	var arr = root.feed.entry;
	var htm = new Array();
	htm.push('<ul>');
	for (var i=0; i<arr.length; i++){
		var obj = arr[i];
		var url = ''+ obj.gsx$url.$t;
		var title =   obj.gsx$name.$t;
		var keys =    obj.gsx$keywords.$t;
		var desc =    obj.gsx$desc.$t;
		var status =    obj.gsx$status.$t;

		htm.push('\n<li><a class="title" href="',url,'">', title,'</a>');
		htm.push('\n  <span class="desc">',  desc,   '</span>'); 
		htm.push('</li>');
	}
	htm.push('</ul>');

	var el = document.getElementById('ProjectList');
	if (el) el.innerHTML = htm.join('');
}


function handleOrgList(root)
{
	gdata = root;
	var el = document.getElementById('OrgList');

	var htm = new Array();
	htm.push('<dl>');

	var arr = root.feed.entry;
	for (var i=0; i<arr.length; i++){

		var obj = arr[i];
		var type = obj.gsx$type.$t;

		//if (! type.match(/^org/)) continue;

		var title = obj.gsx$title.$t;
		var desc = obj.gsx$desc.$t;
		var url = obj.gsx$addr.$t;


		htm.push('\n<dt><a href="', url,'" target="_blank">',
			title,'</a></dt>', '<dd>', desc,'</dd>'
			);
	}
	htm.push('</dl>');

	el.innerHTML = htm.join('');

}



function handlePhoneList(root)
{
	gdata = root;
	var el = document.getElementById('PhoneList');

	var inf = new Array();
	var rpt = new Array();
	inf.push('<table cellpadding=4 border=1 cellspacing=0>',
		'<tr><td><em>Call</em><td><em>for information on ...</em></td>');
	rpt.push('<table cellpadding=4 border=1 cellspacing=0>',
		'<tr><td><em>Call</em><td><em>to report ...</em></td>');

	var arr = root.feed.entry;
	for (var i=0; i<arr.length; i++){

		var type = arr[i].gsx$type.$t;
		var phone = arr[i].gsx$phone.$t;
		var title = arr[i].gsx$title.$t;

		if (type.match('info'))
		   inf.push('\n<tr><td class="telephone" valign=top>',phone,
			'<td valign=top>',title,'</td></tr>');

		if (type.match('report'))
		   rpt.push('\n<tr><td class="telephone" valign=top>',phone,
			'<td valign=top>',title,'</td></tr>');
	}
	inf.push('</table><p>&nbsp;</p>');
	rpt.push('</table><p>&nbsp;</p>');

	el.innerHTML = rpt.join('') + inf.join('');

}


var photoViewer;

var photoArr = new Array();
function handlePhotoList(root,divName)
{
	if (typeof divName == UNDEF) divName = 'PhotoList';
	gdata = root;

	var el = document.getElementById(divName);

	var htm = new Array();
	var dat = new Array();

	var arr = root.feed.entry;
	for (var i=0; i<arr.length; i++){

		var obj = new slide();
		obj.src =    arr[i].gsx$img.$t;
		obj.title =  arr[i].gsx$title.$t;
		obj.legend = arr[i].gsx$legend.$t;
		obj.copyright = 'Copyright &copy; ' +     arr[i].gsx$copyright.$t;
		obj.href =   arr[i].gsx$href.$t;

		obj.alt =    'Photo of ' + obj.title;

		obj.src = 'http://beachwatchers.wsu.edu/' + obj.src;
		obj.href = 'http://beachwatchers.wsu.edu/' + obj.href;

		photoArr.push(obj);

		if (i==0){
			htm.push('\n<a id=ss_href href="',obj.href,'">');
			htm.push('<span id="ss_title">',obj.title,'</span>');
			htm.push('<img width=300 id=ss_img src="',obj.src,'" alt="',obj.alt,'">');

			htm.push('<span id="ss_legend">',obj.legend,'</span>');
			htm.push('<span id="ss_copyright">', obj.copyright,'</span>');
			htm.push('\n</a>');
		}

		var d = ';';

		dat.push(obj.href,d,obj.title,d,obj.src,d,obj.legend,d,obj.copyright,d,obj.alt,'NEWLINE');

	}

	el.innerHTML = htm.join('');

	var divData = divName + 'Data';
	var el=document.getElementById(divData);
	if(el) el.innerHTML = dat.join('');
	else alert('cannot locate ' + divData + ' element');


	photoViewer = new Slideshow();
	photoViewer.imgEl = document.getElementById('ss_img'); 
	photoViewer.hrefEl = document.getElementById('ss_href'); 
	photoViewer.titleEl = document.getElementById('ss_title'); 
	photoViewer.legendEl = document.getElementById('ss_legend'); 
	photoViewer.copyrightEl = document.getElementById('ss_copyright'); 

	var arr = photoArr;
	for (var i=0; i<arr.length; i++){
		photoViewer.add_slide(arr[i]);
	}
	photoViewer.start();

}


// ================================= Species List, by Phyla ========

var ordering = new Object();
var rowArr = new Array();
var phylaDone = false;
var speciesDone = false;
var doc;

function handlePhylaList(root)
{
	var arr = root.feed.entry;

	for (var i=0; i<arr.length; i++){ 
		var obj = new Object();
		obj.stitle = arr[i].gsx$scientific.$t;
		obj.ctitle = arr[i].gsx$common.$t;
		obj.arr = new Array();
		ordering[obj.stitle] = obj;

	}
	phylaDone=true;
	if (speciesDone) fmtSpeciesList();
}

function handleSpeciesList(root)
{
	var arr = root.feed.entry;

	for (var i=0; i<arr.length; i++){ 
		var obj = new Object();
		obj.htm   = arr[i].gsx$file.$t;
		obj.sgroup = arr[i].gsx$phylum.$t;
		obj.sname  = arr[i].gsx$scientific.$t;
		obj.cname  = arr[i].gsx$common.$t;
		rowArr.push(obj);
	}
	speciesDone=true;
	if (phylaDone) fmtSpeciesList();
}

function fmtSpeciesList()
{
	for (var i=0; i<rowArr.length; i++){
		var obj = rowArr[i];
//console.log(obj.sname, obj.sgroup);

		// -- make typos visible
		if (typeof ordering[obj.sgroup] != 'object'){
//console.log('unrecognized phylum/x',obj.sgroup);
			ordering[obj.sgroup] = new Object();
			ordering[obj.sgroup].stitle = obj.sgroup + '***';
			ordering[obj.sgroup].ctitle = obj.sgroup + '***';
			ordering[obj.sgroup].arr = new Array();
		}
		
		ordering[obj.sgroup].arr.push(obj);
	}
	
	// make two indices - one ordered by scientific name, one by common
	var el = document.getElementById('SpeciesList');
	el.innerHTML = mk_list('s') + mk_list('c');
}



function mk_list(prefix)
{


	var indent = '&nbsp;&nbsp;&nbsp;&nbsp;'

	var alt = 'c'; if (prefix == 'c') alt = 's';
	var tog = new Object();
	tog.c = "common"
	tog.s = "scientific"
	

	var htm = new Array();
	htm.push('\n\n<div id=',prefix,'names>');

	htm.push('\n<table class=specieslist cellpadding=0 cellspacing=10 border=0>',
		'<tr><td valign=top>',
		'Note: Species are ordered <br>by ',tog[prefix], 
		' names within groupings',
		'</td><td align=right valign=top>',
		'<a href=javascript:toggleDivs("',prefix,'","',alt,'")>',
		'change to<br>',tog[alt], ' ordering.</a>'
		);
	var trz = '</td></tr>';

	var prevp = '';
	for (var x in ordering){
		if (x.match(/^[ \t]*$/)) continue;
//console.log('xobj.key is ',x);
		var xobj = ordering[x];
		var tmp = xobj[prefix+'title'].split('/');
		if (tmp[0] != prevp){

			prevp = tmp[0];

			htm.push(trz); trz = '</table></td></tr>';

			// start new phylum box
			htm.push('\n\n<tr><td colspan=2><table class=phylum border=0 cellpadding=1 cellspacing=0 width=100%><tr><td class=tdx>');
			if (prevp != '-'){ 
				htm.push('\n&nbsp;<br>');
				htm.push(indent,'<strong>',tmp[0],'</strong>');

				var atmp = xobj[alt+'title'].split('/');
				htm.push('\n</td><td class=tdx align=right valign=top>');
				htm.push('\n&nbsp;<br>');
			
				htm.push('<strong>',atmp[0],'</strong>',indent,'</td></tr>');
			}

		}

		// show [optional] sub-groups under phylum
		if (tmp[1] != '-')
			htm.push('\n<tr><td class=tdx colspan=2>',
			indent,'<em>',tmp[1],'</td></tr>');


		var arr = xobj.arr;
		var sarr = new Array();
		for (var i=0; i<arr.length; i++){
			var obj = arr[i];
			var skey = obj[prefix+'name'];
			sarr.push(skey+';'+i);
		}
		sarr.sort();
		for (var j=0; j<sarr.length; j++){
//console.log(sarr[j]);
			var tmp = sarr[j].split(';');
			var i = parseInt(tmp[1]);

			var obj = arr[i];

			var name1 = obj[prefix+'name'];
			var name2 = obj[alt+'name'];
			if (prefix == 's') name1 = '<i>'+name1+'</i>';
			else               name2 = '<i>'+name2+'</i>';

			htm.push('\n<tr><td class=tdx>',indent,indent,
				'<a href="', obj.htm,'">',

				name1,

				'</a>', 
				'</td><td class=tdx align=right>',

				name2,
				indent,
				'</td></tr>\n');
		}
		htm.push('\n<tr><td colspan=2 class=tdx>&nbsp;</td></tr>');


	}
	htm.push(trz);
	htm.push('</table></div>\n\n');
	return htm.join('');
}

