// var website = "http://ewh.ieee.org/r6/scv/computer";
var website = "./";

function testload()
{
	UpdateLeftNav( 5 );
}

function load()
{
	UpdateWholePage( 5 )
	// UpdateMainPage( 5 );
	// UpdateLeftNav( 5 );
}

function GetDebugData( data )
{
	switch( data )
	{
		case 'main':
			value = "<xml><table><tr><td>name1</td></tr><tr><td>name2</td></tr></table><xml>";
		break;
		case 'left':
		break;
	}
	
	return value;
	
}

function LoadXML( text )
{
	try //Internet Explorer
	{
		xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async="false";
		// xmlDoc.loadXML( text );
                // On IE 7,8,and ?, extra characters befoe xml causes
                //    the load to fail
		xmlDoc.loadXML( text.substring( text.indexOf("<xml>")));
	}
	catch(e)
	{
		try //Firefox, Mozilla, Opera, etc.
		{
			parser=new DOMParser();
			xmlDoc=parser.parseFromString(text,"text/xml");
		}
		catch(e)
		{
			alert(e.message);
			return;
		}
	}
	
	return xmlDoc;
}

function ReadTable( xmlDoc )
{
	var tablenode;
	/*
	tablenode = xmlDoc.getElementsByTagName( "table" )[0];
	
	for ( var i = 0; i < tablenode.childNodes.length; i++ )
	{
		value = tablenode.childNodes[i].nodeValue;
	}
	*/
}

function ClearNode( n )
{
	if ( n.hasChildNodes() )
	{
		while( n.childNodes.length >= 1 ) {
			n.removeChild( n.firstChild);
		}
	}
}

function UpdateWholePage( maxevents )
{
	var request   = createHttpRequest();
	var url       = website + "/csquery.php";

	request.onreadystatechange = function()
	{
		if( request.readyState!=4)
			return;
		if( request.status!=200)
		{
			alert("Problem retrieving main page data")
			return;
		}

		xmlDoc = LoadXML( request.responseText );
		
		// Updating Main Page
		ReadWriteMainContent( xmlDoc )
		
		// Updating Left Nav
		ReadWriteLeftNav( xmlDoc )
	}
		
	request.open( "GET", url, true )
	request.send( null )
}

function ReadWriteMainContent( xmlDoc )
{
	u = xmlDoc.getElementsByTagName( "UpcomingMeetings" );
	                                                      
	x = u[0].getElementsByTagName( "record" ); 
	// on the first element, get the records
	// x = request.responseXML.documentElement.getElementsByTagName("record");

	// location is used in javascript?  
	txt = '';
	for (i=0; i< x.length; i++)
	{
		//talk_title        = x[i].getElementsByTagName('talk_title')[0].firstChild.nodeValue;
		//speaker_name      = x[i].getElementsByTagName('speaker_name')[0].firstChild.nodeValue;
		//talk_abstract     = x[i].getElementsByTagName('talk_abstract')[0].firstChild.nodeValue;
		//speaker_position  = x[i].getElementsByTagName('speaker_position')[0].firstChild.nodeValue;
		//speaker_biography = x[i].getElementsByTagName('speaker_biography')[0].firstChild.nodeValue;
        
		meeting_abstract  = '';
		meeting_name      = '';
		meeting_name      = x[i].getElementsByTagName('meeting_name')[0].firstChild.nodeValue;
		meeting_topic     = x[i].getElementsByTagName('meeting_topic')[0].firstChild.nodeValue;
		meeting_abstract  = x[i].getElementsByTagName('meeting_abstract')[0].firstChild.nodeValue;
		meeting_date      = x[i].getElementsByTagName('meeting_date')[0].firstChild.nodeValue;
		meeting_time      = x[i].getElementsByTagName('meeting_time')[0].firstChild.nodeValue;
		meeting_type      = x[i].getElementsByTagName('meeting_type')[0].firstChild.nodeValue;
		meeting_location  = x[i].getElementsByTagName('location')[0].firstChild.nodeValue;
		registration_url  = x[i].getElementsByTagName('registration_url')[0].firstChild.nodeValue;
		cost              = x[i].getElementsByTagName('cost')[0].firstChild.nodeValue;
		
		sponsors          = x[i].getElementsByTagName('sponsors')[0].getElementsByTagName('sponsor');
		talks             = x[i].getElementsByTagName('talks')[0].getElementsByTagName('talk');
		if ( sponsors.length )
		{
			if ( sponsors.length > 1 )
			{
				sponsorline = '<p><b>Sponsors:</b> ';
			} else {
				sponsorline = '<p><b>Sponsor:</b> ';
			}
			
			sponsorstack = Array();
			for (j=0; j < sponsors.length; j++)
			{
				if ( j != 0 )
				{
					sponsorline += ', ';
				}
				sponsorline += '<a href=';
				sponsorline += sponsors[j].getElementsByTagName('sponsor_url')[0].firstChild.nodeValue;
				sponsorline += '>';
				sponsorline += sponsors[j].getElementsByTagName('sponsor_name')[0].firstChild.nodeValue;
				sponsorline += '</a>';
				
				var regexp = /^(\w+)/;
				var result = regexp.exec( 
						sponsors[j].getElementsByTagName('sponsor_name')[0].firstChild.nodeValue
				);
				if ( result != null )
				{
					dopush = 1;
					string = result[1];
					for ( k=0; k < sponsorstack.length; k++)
					{
						if ( sponsorstack[k] == string)
						{
							dopush = 0;
							break;
						}
					}
					if ( dopush == 1)
					{
						sponsorstack.push( string );
					}
				}
			}
			
		} else {
			sponsorline = '';
		}

		if ( sponsorstack.length > 1 &&
				( meeting_type == 'NFIC' || meeting_type == 'High Tech Forum' ))
		{	
			txt += '<p><font size=6>';
			txt += '<b>';
			txt += sponsorstack.join( '-' ); 
			txt += ' Joint Conference </b>';
			txt += '</font><p>';
		}
		
		if ( meeting_name != '' )
		{
			txt += '<p><font size=5>';
			txt += '<b>';
			txt += meeting_topic;
                        txt += '</font>';
			txt += '<p>';
                        txt += '<font size=4>';
			txt += meeting_name;
			txt += '<p>';
			txt += '</b>';
			txt += '</font><p>';
		}
		if ( meeting_abstract != '' )
		{
			txt += meeting_abstract;
			txt += '<p>';
		}

		if ( meeting_type == 'NFIC' || meeting_type == 'High Tech Forum' )
		{
			meeting_program_url = x[i].getElementsByTagName('meeting_program_url')[0].firstChild.nodeValue
			meeting_agenda = x[i].getElementsByTagName('meeting_agenda');
			if ( meeting_agenda.length == 0 )
			{
				programline    = '<p><b>Program:</b> <p>';
				for (j=0; j < talks.length; j++)
				{
					if ( talks[j].getElementsByTagName('talk_title').length  )
					{
						if ( talks[j].getElementsByTagName('talk_title')[0].firstChild != null )
						{
							programline += "\"";
							programline += talks[j].getElementsByTagName('talk_title')[0].firstChild.nodeValue;
							programline += "\" by ";
						}
					} 
				
					programline += talks[j].getElementsByTagName('speaker_name')[0].firstChild.nodeValue;
					programline += ', ' + talks[j].getElementsByTagName('speaker_position')[0].firstChild.nodeValue;
					programline += '<p>';
				}
			} else {
				programline = x[i].getElementsByTagName('meeting_agenda')[0].firstChild.nodeValue;
			}
			txt += programline;
			
			if ( meeting_program_url.indexOf( "http://" ) == -1 )
			{
				url = website + meeting_program_url;
			} else {
				url = meeting_program_url;
			}
			txt += "Click <a href=" + url + ">here</a> for details on the program.";
		} else {
			speakersline    = '<p><b>Speaker:</b> ';
			biographiesline = '<p><b>Biography:</b> ';
				
		        for (j=0; j < talks.length; j++)
		        {
		 	   txt += '<p><font size=3><b>';
  			   txt += talks[j].getElementsByTagName('talk_title')[0].firstChild.nodeValue; 
			   txt += '</b></font><p>';
			   txt += talks[j].getElementsByTagName('talk_abstract')[0].firstChild.nodeValue;
			   txt += '<p><b>Speaker:</b> ';
			   txt += talks[j].getElementsByTagName('speaker_name')[0].firstChild.nodeValue;
           		   txt += ', ' + talks[0].getElementsByTagName('speaker_position')[0].firstChild.nodeValue;
                           if ( talks[j].getElementsByTagName('speaker_biography')[0].firstChild.nodeValue != '' )
                           { 
   			      txt += '<p><b>Biography:</b> ';
			      txt += talks[j].getElementsByTagName('speaker_biography')[0].firstChild.nodeValue;
                           }
			   txt += '<p>';
                       }
		} 
		
		//txt += '<p>';
		//txt += '<p><b>Biography:</b> ' + speaker_biography;
		//// array_push( outstack,  '<p><b>Talk Type:' . '.....' );
		txt += '<p><b>Date:</b> ' + meeting_date;
	    txt += '<p><b>Time:</b> ' + meeting_time;
		
		txt += '<p><b>Location:</b> ' + meeting_location;
		txt += '<p><b>Registration:</b> ' + registration_url;
		txt += '<p><b>Cost:</b> ' + cost;
		txt += '<p>';
		txt += sponsorline;
		
		txt += '<p><b>======================================================</b>';
	}
	node = getThisElementWithID( 'DIV', 'mainContent' );
	node.innerHTML = txt;
}

function UpdateMainPage( maxevents )
{
	var request   = createHttpRequest();
	var queryname = 'GetUpcomingMeetings';
	var url       = website + "/csquery.php?queryname=" + queryname;

	request.onreadystatechange = function()
	{
		if( request.readyState!=4)
			return;
		if( request.status!=200)
		{
			alert("Problem retrieving main page data");
			return;
		}

		xmlDoc = LoadXML( request.responseText );
		
		// Updating Main Page
		ReadWriteMainContent( xmlDoc )
	}
	request.open( "GET", url, true )
	request.send( null )
}

	// This works find with firefox and chrome; however on internet explorer
	//   node.parentNode.parentNode.parentNode.innerHTML = txt.value;
    // the innerHTML does not work properly on internet exploxer.
    //   one work around is appendChild as div object
	//      node2 = node.parentNode.parentNode.parentNode;
	//      var newdiv = document.createElement("div");
	//      newdiv.innerHTML = txt.value;
	//      node2.appendChild(newdiv);
    //   another possibility is to use innerHTML at the table node rather than tbody node.
function UpdateLeftNav( maxevents )
{
	var txt       = '';
	var request   = createHttpRequest();
	var queryname = 'GetPastMeetings';
	var url       = website + "/csquery.php?queryname=" + queryname;

	request.onreadystatechange = function()
	{
		if( request.readyState!=4)
			return;
		if( request.status!=200)
		{
			alert("Problem retrieving main page data");
			return;
		}

		xmlDoc = LoadXML( request.responseText );
		ReadWriteLeftNav( xmlDoc )
	}
	request.open( "GET", url, true )
	request.send( null )
}

function ReadWriteLeftNav( p )
{
	p = xmlDoc.getElementsByTagName( "PastMeetings" )
	
	if ( p.length != 0 )
	{
		var frag = document.createDocumentFragment();
		for (i=0; i< p.length; i++)
		{
			thisnode = p[i].getElementsByTagName( 'name');
			
			/* create title of menu */
			var row1        = document.createElement("tr");
			var data1       = document.createElement("td");
			var table2      = document.createElement("table");
			var tb2         = document.createElement("tbody");
			var titlerow2   = document.createElement("tr");
			var titledata2  = document.createElement("td");
			var titlediv    = document.createElement("div");
			var br          = document.createElement( "br");
			
			table2.className="leftnav";
			table2.cellSpacing=0;
			table2.cellpadding=0;
			table2.width=195;
			table2.border=0;
			
			titledata2.className="leftnav_title_row";
			titledata2.height=20;
			
			titlediv.className="leftnav_title";
			
			titlediv.appendChild( document.createTextNode( p[i].getElementsByTagName( 'name' )[0].firstChild.nodeValue ) );
			titledata2.appendChild( titlediv );
			titlerow2.appendChild( titledata2 );
			tb2.appendChild( titlerow2 );
			table2.appendChild( tb2 );
			data1.appendChild( table2 );
			row1.appendChild( data1 );
			
			/* add the rows */
			records = p[i].getElementsByTagName( 'records')[0];
			recordrows = records.getElementsByTagName( 'record');
			for ( j=0; j < recordrows.length; j++ )
			{
				meeting_date       = recordrows[j].getElementsByTagName('meeting_date')[0].firstChild.nodeValue;

				var r1 = document.createElement("tr");
				var d1 = document.createElement("td");
				var t1 = document.createElement("table");
				var tb1 = document.createElement("tbody");       // IE requires explicit tbody

				var r2 = document.createElement("tr");
				var d2a = document.createElement("td");
				var div2a = document.createElement("div");
				var span2a = document.createElement("span");
				var d2b = document.createElement("td");
				var div2b = document.createElement("div");
				var b2b = document.createElement("b");

				var a2 = document.createElement("a");

				var d2c = document.createElement("td");
				var img2 = document.createElement("img");

				r1.className = 'leftnav_primary';
				t1.cellSpacing = 0;
				t1.cellPadding = 0;
				t1.width = "100%";
				t1.border = 0;

				r1.appendChild( d1 );
				d1.appendChild( t1 );
//				t1.appendChild( r2 );                         // IE requires explicit tbody         
				t1.appendChild( tb1 );
				tb1.appendChild( r2 );
				r2.appendChild( d2a );
				d2a.appendChild( div2a );
				div2a.appendChild( span2a );
				r2.appendChild( d2b );
				d2b.appendChild( div2b );
				div2b.appendChild( b2b );
				div2b.appendChild( a2 );

				r2.appendChild( d2c );
				d2c.appendChild( img2 );

				d2a.className='leftnav_bullet';
				d2a.width = 10;
				div2a.className = 'leftnav_primary_bullet';
				span2a.className = 'sectionHeaders';
				span2a.innerHTML = '&raquo';
				// span2a.appendChild( document.createTextNode( '&raquo;'));
				div2b.className='leftnav_primary_item';
				b2b.appendChild( document.createTextNode( meeting_date + " " ) );

				meeting_name_node       = recordrows[j].getElementsByTagName('meeting_name');
				if ( meeting_name_node.length != 0 )
				{
					meeting_name = meeting_name_node[0].firstChild.nodeValue;
					meeting_date = recordrows[j].getElementsByTagName('meeting_date')[0].firstChild.nodeValue;
					meeting_program_url = recordrows[j].getElementsByTagName('meeting_program_url')[0].firstChild.nodeValue;
					a2.className = 'snav';
					a2.href = meeting_program_url;
					a2.target = '_self';
					a2.appendChild( document.createTextNode( meeting_name ));
				} else {
					talk_id       = recordrows[j].getElementsByTagName('talk_id')[0].firstChild.nodeValue;
					speaker_name  = recordrows[j].getElementsByTagName('speaker_name')[0].firstChild.nodeValue;
					speaker_position_node = recordrows[j].getElementsByTagName('speaker_position');

					a2.className = 'snav';
					a2.href = 'cspage.php?page=talkdetail&talkid=' + talk_id; 
					a2.target = '_self';
					a2.appendChild( document.createTextNode( speaker_name.replace( /^\s+|\s+$/g, '')));

					if ( speaker_position_node.length != 0 )
					{
						speaker_position = speaker_position_node[0].firstChild.nodeValue;
						div2b.appendChild( document.createTextNode( ", " + speaker_position )) ;
					}
				}

				d2c.className='leftnav_row_arrow';
				d2c.vAlign='top';
				d2c.align='right';
				d2c.width=1;
				img2.height=20;
				img2.alt="";
				img2.src='http://ewh.ieee.org/templates/spacer.gif';
				img2.width=1;
				
				tb2.appendChild( r1 );
			}
			data1.appendChild( br );
			frag.appendChild( row1 )	;
		}

		// prepare entries in Left Nav
		node = getThisElementWithClass( 'TABLE', 'leftnav' );
		node2 = node.parentNode.parentNode.parentNode;   // goto tbody
		ClearNode( node2 );
		
		//node = getThisElementWithClassAndNodeValue( 'DIV', 'leftnav_title', meetingtype );
		//node.parentNode.parentNode.parentNode.appendChild( frag );
		node2.appendChild( frag );
	}
}

function getThisElementWithID( ThisElement, ThisID )
{
	var divNode;
	var divElements = document.getElementsByTagName( ThisElement );

	for( var i=0; i < divElements.length;i++)
	{
		if ( divElements[i].id == ThisID )
		{
			divNode = divElements[i];
			break;
		}
	}
	
	return divNode;
}

function getThisElementWithClass( ThisElement, ThisClassName )
{
	var divNode;
	var divElements = document.getElementsByTagName( ThisElement );

	for( var i=0; i < divElements.length;i++)
	{
		if ( divElements[i].className == ThisClassName )
		{
			divNode = divElements[i];
			break;
		}
	}
	
	return divNode;
}

function getThisElementWithClassAndNodeValue( ThisElement, ThisClassName, ThisNodeValue )
{
	var divNode;
	var divElements = document.getElementsByTagName( ThisElement );

	for( var i=0; i < divElements.length;i++)
	{
		if ( divElements[i].className == ThisClassName )
		{
			if ( divElements[i].firstChild.nodeValue == ThisNodeValue )
			{
				divNode = divElements[i];
				break;
			}
		}
	}
	
	return divNode;
}

function createHttpRequest() 
{
	var request;
	
	try {
		request = new XMLHttpRequest();
	} catch (trymicrosoft) {
		try {
			request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (othermicrosoft) {
			try {
				request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (failed) {
				request = false;
			}
		}
	}

	if (!request)
		alert("Error initializing XMLHttpRequest!");
		
	return request;
}

