/////////////////////////////////////////////
//
// Copyright Textura 2005
//
// Code may not be used, copied or modified 
// without permission.
//
/////////////////////////////////////////////
//
// JAVASCRIPT - newsutils.js
//
// Set of utilities to handle dynamic news content with 
// automatic content aging.

// CONSTANTS

var new_range = 14;
var year_range = 4;

// VARIABLES

var archive_year=0;
var base = "";
var max_year = 0;
var min_year = 0;
var news_format=0;
var news_items=0;
var nonews = 1;
var no_show = 0;
var old_news = 0;
var today = new Date();
var year_now = today.getFullYear();

// Determine year ranges

max_year = year_now-1;
min_year = max_year-year_range;

// URL PARAMETER MANAGEMENT
// Extracted from JAVASCRIPT: The definitive Guide by David Flanagan

function get_params()
{
	var args = new Object();
	var query = location.search.substring(1);
	var pairs = query.split("&");
	for (var i = 0; i < pairs.length; i++)
	{
		var pos = pairs[i].indexOf('=');
		if (pos == -1 ) continue;
		var argname = pairs[i].substring(0,pos);
		var value = pairs[i].substring(pos+1);
		args[argname] = unescape(value);
	}
	return args;
}

// NEWS MANAGEMENT

function formdate(datestr)
{
   if (datestr.substring(4) >"50") formeddate=new Date(19+datestr.substring(4),datestr.substring(2,4)-1,datestr.substring(0,2),23,59);
   else formeddate=new Date(20+datestr.substring(4),datestr.substring(2,4)-1,datestr.substring(0,2),23,59);
   return formeddate;
}

function show_date(thedate)
{
   var day = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
   var month = new Array("January","February","March","April","May","June","July","August", "September","October","November","December");
   var days = new Array("","st","nd", "rd","th","th","th","th","th","th","th","th","th","th","th","th","th","th","th","th","th","st","nd","rd","th","th","th","th","th","th","th","st");
   var lastDate=formdate(thedate);
   document.write(lastDate.getDate() + days[lastDate.getDate()]+'&nbsp;');
   document.write(month[lastDate.getMonth()] + '&nbsp;');
   document.write(lastDate.getFullYear() + '&nbsp;');
}

function newsyear(datestr)
{
   // Y2K date handling
   if (datestr.substring(4) >"50") year='19'+datestr.substring(4)
   else year = '20'+datestr.substring(4);
   return year;
}

function show_new(newsdate,expires)
{
   // Check item has not expired. Expires format is ddmmyy as a string
   today=new Date();
   expiredate=formdate(expires);
   news_date=formdate(newsdate);
   news_date.setDate(news_date.getDate()+new_range);
   if (news_date > expiredate)
   {
      news_date=expiredate;
   }
   return (today < news_date);
}

function get_nonews()
{
   return nonews;
}

function set_nonews(val)
{
   nonews=val;
   news_items++;
}

function get_old_news()
{
   return old_news;
}

function set_oldnews(val)
{
   old_news=val;
   if (val == 0) archive_year=0;
}

function set_base(base_str)
{
   base = base_str;
}

function set_year_range(min,max)
{
   max_year =(max < year_now ? max : year_now-1);
   min_year =(min < max ? min : max);
   min_year =(max_year - min_year > year_range ? max_year-year_range : min_year);
}

function start_news()
{
   var args = get_params();   
   nonews      =1;
   no_show     =0;
   news_items  =0;
   old_news    =0;
   archive_year=0;
   // Check URL parameters
   if (args.year) archive_year = parseInt(args.year);
   if (args.full) set_oldnews(1);
   if (archive_year > 0)
   {
      document.write('<h1>Old News for ' + archive_year + '</h1>');
      set_oldnews(1);
   }
   else
   {
      if (get_old_news () > 0) document.write('<h1>Old News for ' + year_now + '</h1>');
   }
   document.write('<table summary="News Summary">');
}

function stop_news()
{
   // Check if any news items have been shown. If not
   // show default message
   if (nonews > 0)
   {
      // No News!
      if (archive_year > 0)
      {
      	  document.writeln('<tr><td class="news" colspan="2">No News</td></tr>');
      }
      else document.writeln('<tr><td class="news" colspan="2">Nothing to report at moment.</td></tr>');
   }
   document.write('</table>');
//   if (archive_year > 0)
   if (get_old_news() > 0)
   {
      document.write('<p>');
      for (year = min_year; year <= max_year; year++)
      {
         if (archive_year != year) document.write('<a href=' + base + 'news.htm?year=' + year + '>' + year + ' News</a>&nbsp;&nbsp;');
      }
      if (archive_year > 0) document.write('<a href=' + base + 'news.htm?full=true>' + year_now + ' news</a>&nbsp;&nbsp;&nbsp;');
      document.write('</p>');            
   }
}

function set_news_format(val)
{
   news_format=val;
}

function get_news_format()
{
   return news_format;
}

function show_old_news(page)
{
   old_news = 1;
   location.replace(location.href);
}

function set_archive(year)
{
   old_news = 1;
   archive_year=year;
}

function news (newsdate, expires, url_link, item)
{
   // Check item has not expired. Expires format is ddmmyy as a string
   today=new Date();
   expiredate=formdate(expires);
   if (get_old_news() > 0)
   {
     show = (today.getTime() < expiredate.getTime() ? 0: 1);
     if (show > 0)
     {
        // News has expired
        show = (newsyear(newsdate) == archive_year ? 1 : 0);
     }
   }
   else
   {
   	 // Current news
     show = (today.getTime() < expiredate.getTime() ? 1: 0);
   }
   if (show > 0)
   {
      // Report item
      document.write('<tr><td class="news">');
      if (get_news_format() == 0)
      {
         show_date(newsdate);
      }
      news_date=formdate(newsdate);
      if (show_new(newsdate,expires))
      {
         document.write ('<b class="new">NEW&nbsp;</b>');
      }
      document.write('</td><td>');
      if (url_link != "")
      {
         document.write('<a href="' + url_link + '">' + item + '</a>');
      }
      else document.write(item);
      document.writeln('</td></tr>');
      nonews=0;
   }
   else
   {
      no_show = 1;
   }
}

// END OF FILE
