
var gXmlToStringConverter = new XMLSerializer();
var gNewsEntries = new Array();

function createXMLHttp() 
{
	if (typeof XMLHttpRequest != 'undefined') 
	{
		return new XMLHttpRequest();
	}
	else if (window.ActiveXObject) 
	{
		var avers = ["Microsoft.XmlHttp", "MSXML2.XmlHttp",
					 "MSXML2.XmlHttp.3.0", "MSXML2.XmlHttp.4.0",
					 "MSXML2.XmlHttp.5.0"];
					 
		for (var i = avers.length -1; i >= 0; i--) 
		{
			try 
			{
				httpObj = new ActiveXObject( avers[ i ] );
				return httpObj;
			}
			catch(e) 
			{}
		}
	}
	throw new Error('XMLHttp (AJAX) not supported');
}


function getXmlAsHtml( inNodeList )
{

	var string = "";
	for( var j = 0; j < inNodeList.length; ++j )
	{
		string += gXmlToStringConverter.serializeToString( inNodeList[ j ] );
	}

	return string;

}

function compareByDate( a, b )
{
	if( a.date > b.date ) 
	{
		return -1; 
	}
	else if( a.date < b.date ) 
	{
		return 1; 
	}
	else
	{
		return 0;
	}
}


function compareByCategory( a, b )
{
	if( a.category < b.category ) 
	{
		return -1; 
	}
	else if( a.category > b.category ) 
	{
		return 1; 
	}
	else
	{
		return 0;
	}
}



//execute an xml fetch an then call a callback when that comes in...
function loadXML( inURL, inCallback1, inCallback2 )
{
	
   	var ajaxObj = createXMLHttp(); 
    ajaxObj.onreadystatechange = function() 
    { 
    	if ( ajaxObj.readyState == 4 ) 
        {
            if ( ajaxObj.status != 200 && ajaxObj.status != 0 ) 
            {
                alert( "Error : couldn't load dynamic gunk, status " + this.status );
            } 
            else 
            {
    			inCallback1( ajaxObj ); 
    			inCallback2();
            }
        }
    
    }
    
    //ajaxObj.open( "GET", inURL +'?dummy='+ new Date().getTime(), true); 
    ajaxObj.open( "GET", inURL, true); 
    ajaxObj.send(null);
}


function MakeArrayWithEntries( inRequest )
{
	var xmlDoc = inRequest.responseXML;
	var entries = xmlDoc.getElementsByTagName( "entry" );
	var newArray = new Array();
	
	for( var i = 0; i < entries.length; ++i )
	{
		 var entry = entries[ i ];
	
		//okay, what we have to do is create an array (so we can sort it by date or whatever)
		var newsEntry = new Object();
		newsEntry.date = new Date( entry.attributes[ "date" ].textContent );
		newsEntry.category = entry.attributes[ "category" ].textContent;
		newsEntry.headline = getXmlAsHtml( entry.getElementsByTagName( "headline" )[ 0 ].childNodes );

		newsEntry.article = getXmlAsHtml( entry.getElementsByTagName( "article" )[ 0 ].childNodes );
		newArray[ newArray.length ] = newsEntry;
	}
	
	//and sort...
	newArray.sort( compareByDate );
	
	return newArray;
}

function loadNewsCallback( inRequest )
{
	gNewsEntries = MakeArrayWithEntries( inRequest );    
}


function loadBlogCallback( inRequest )
{
	gBlogEntries = MakeArrayWithEntries( inRequest );
}


function addNewsHeadlinesToFooter( )
{ 
	addHeadlinesToFooter( gNewsEntries, "News", "News.html", "newsHeadlines" );
}

function addBlogHeadlinesToFooter( )
{ 
	addHeadlinesToFooter( gBlogEntries, "Blog", "blog.htm", "blogHeadlines" );
}


function addHeadlinesToFooter( inArray, inPrefix, inClickURL, inTargetId )
{         
    //now, let's add them! we should sort them eventually...
    var target = document.getElementById( inTargetId );        
    var maxEntryCount = Math.min( inArray.length, 6 );
    for( var i = 0; i < maxEntryCount; ++i )
    {
    	var entry = inArray[ i ];
    	target.innerHTML +=  "<div id=\"" + inPrefix + ( i + 1 ) + "t\"><p><a href=\"" + inClickURL + "?category=" + escape( entry.category ) + "\" <strong>" + entry.headline + "</strong></a></p></div>";
    }   
}



function addNewsHeadlinesAndContentToNewsPage()
{
	addHeadlinesAndContentToPage( gNewsEntries, "NewsCategories", "News" )
}

function addBlogsToBlogPage()
{
	addHeadlinesAndContentToPage( gBlogEntries, "BlogCategories", "Blog" ) 
}

function addHeadlinesAndContentToPage( inArray, inTargetId, inPrefix )
{
	//okay, we have all the news loaded, so we have to add categories buttons for each category.
	//that means first sort by category and then by date
	//assume that works...
	
	//okay, so sort by category...
	inArray.sort( compareByCategory );
	
	//now, first add a button for "all" to the table
	//then add a button for each news item...
	var target = document.getElementById( inTargetId ); 
	    
 	target.innerHTML =   "<div id=\"" + inPrefix + "1\"><p><strong><a href=\"javascript:goto" + inPrefix + "Category( 'All' )\"><strong>All</strong></a></p></div>";
    
    
    var lastCategory = "";
    var catNum = 1;
    for( var i = 0; i < inArray.length; ++i )
    {
    	var entry = inArray[ i ];
    	if( lastCategory != entry.category )
    	{
	    	target.innerHTML +=  "<div id=\"" + inPrefix + ( catNum + 1 ) + "\"><p><a href=\"javascript:goto" + inPrefix + "Category( '" + entry.category + "' )\"><strong>" + entry.category + "</strong></a></p></div>";
	    	lastCategory = entry.category;
	    	catNum++;
    	}
    }   
    
    //now the content!- if there's a category in the request, get that, otherwise get all!
    var cat = gup( "category" );
    cat = ( cat.length <= 0 ) ? "All" : unescape( cat );

    gotoCategory( inPrefix, cat, inArray );

}

function loadNewsAndBlogFooter()
{
	loadXML( "News.xml", loadNewsCallback, addNewsHeadlinesToFooter );
	//loadXML( "Blog.xml", loadBlogCallback, addBlogHeadlinesToFooter );
}

function loadNewsPage()
{
	loadXML( "News.xml", loadNewsCallback, addNewsHeadlinesAndContentToNewsPage );
}

function loadBlogPage()
{
	loadXML( "Blog.xml", loadBlogCallback, addBlogsToBlogPage );
}

function gotoNewsCategory( inCat )
{
	gotoCategory( "News", inCat, gNewsEntries );
}

function gotoBlogCategory( inCat )
{
	gotoCategory( "Blog", inCat, gBlogEntries );
}

function gotoCategory( inPrefix, inCategory, inArray )
{
	//assume news is loaded?
	//so get the iframe...
	var doc = window.frames[ "ViewScreen" ].document;
	
	var target = doc.getElementById( inPrefix );
	
	inArray.sort( compareByDate );
	
	//blogs include the author if the category is all


	target.innerHTML = "";
	for( var i = 0; i < inArray.length; ++i )
    {
    	var entry = inArray[ i ];
    	if( inCategory == "All" || inCategory == entry.category )
    	{
    		var authorString = ( inCategory == "All" && inPrefix == "Blog" ) ? ( entry.category + " :<br/>" ) : "";
		    target.innerHTML +=  "<p><h2>" + formatdate( entry.date ) + "</h2>" + authorString +" <h1>" + entry.headline + "</h1><blockquote>" + entry.article + "</blockquote></p>";	    	
    	}
    }

	//tell the scroll to adjust and then the thumb!    
 
 	var aScroll = doc.theScroll[ 0 ];
 	var aThumb = doc.theThumb[ 0 ];
 
    aScroll.handleNewDoc();
    aThumb.adjustToNewDoc( 0 );
    
	//doc.theScroll[ 0 ].jumpTo(0, 0)
	//doc.theScroll[ 0 ].scrollNorth( 1 )
	//aScroll.scroll( 90, 1 );
	aScroll.jumpTo( 0, 0 );
	/*
	if(deg=='270')	
	{
			aThumb.style.top = parseInt( ( ( aThumb.maxY-aThumb.minY) * aScroll.scrollTop / aScroll.stopV ) + aThumb.minY) + "px"; //ok nomes down
	}
	else if(deg=='90')	
	{
	*/
		if( aScroll.scrollH > 0 )
		{
			aThumb.style.top = parseInt( ( ( aThumb.maxY-aThumb.minY) * aScroll.scrollTop / aScroll.scrollH ) + aThumb.minY) + "px"; //ok nomes down
		}
		else
		{
			aThumb.style.top = aThumb.minY + "px"; //ok nomes down
		}
	//}

}


function formatdate( inD )
{
	var twoDigitYear = inD.getYear();
	if( twoDigitYear < 10 )
	{
		twoDigitYear = "0" + twoDigitYear;
	}
	return ( inD.getMonth() + 1 ) + "/" + inD.getDate() + "/" + twoDigitYear;
}

function gup( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

