/*****************************************************************
	Time Series Navigation and Animation Functions

	Written by Alex Prusevich - alex.proussevitch@unh.edu

	Updated October, 2007
******************************************************************/

	/* Global Variables */

var month = [31,29,31,30,31,30,31,31,30,31,30,31];
var sdays = [0,31,59,90,120,151,181,212,243,273,304,334];
var day = ['01','02','03','04','05','06','07','08','09','10','11','12','13','14','15',
      '16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31'];

var URL_img = "/images/explorer/";
var Start_Anm = new Image(110,37); Start_Anm.src = URL_img + "Start_Anm.gif";
var Stop_Anm = new Image(110,37); Stop_Anm.src = URL_img + "Stop_Anm.gif";
var Faster = new Image(55,37); Faster.src = URL_img + "Faster.gif";
var Faster_p = new Image(55,37); Faster_p.src = URL_img + "Faster-p.gif";
var Slower = new Image(55,37); Slower.src = URL_img + "Slower.gif";
var Slower_p = new Image(55,37); Slower_p.src = URL_img + "Slower-p.gif";
var Empty_Im = new Image(48,24); Empty_Im.src = URL_img + "empty.gif";

var custom_days;

	/* Time Series Navigation Functions */

function Refresh_Fig(Order,tsScale,button) {
  var formObj = button.form;
  var Date_start,Date_end = 0;
  if (tsScale == 'daily' && formObj.day.length < 28) {
    tsScale = 'custom_daily';
    custom_days = formObj.day.length;
  }

  switch (tsScale) {
    case 'custom_daily':
	var min_day_index = 0;
	var max_day_index = 0;
	while (formObj.day.options[min_day_index].value < Start_Month_Min_Day) {min_day_index++;}
	while (formObj.day.options[max_day_index].value < End_Month_Max_Day)   {max_day_index++;}
	Date_start = Start_Year*12*custom_days + Start_Month_1*custom_days + min_day_index;
	Date_end = End_Year*12*custom_days + End_Month_1*custom_days + max_day_index;
	break;

    case 'daily':
	Date_start = Start_Year*365 + sdays[Start_Month_1] + Start_Month_Min_Day - 1;
	Date_end = End_Year*365 + sdays[End_Month_1] + End_Month_Max_Day - 1;
	break;

    case 'daily_clim':
	Date_start = sdays[Start_Month_1] + Start_Month_Min_Day - 1;
	Date_end = sdays[End_Month_1] + End_Month_Max_Day - 1;
	break;

    case 'monthly':
	Date_start = Start_Year*12 + Start_Month_1;
	Date_end = End_Year*12 + End_Month_1;
	break;

    case 'monthly_clim':
	Date_start = 0;
	Date_end = 11;
	break;

    case 'yearly':
	Date_start = 0;
	Date_end = formObj.year.length-1;
	break;

    case 'decadal':
	Date_start = 0;
	Date_end = formObj.year.length-1;
	break;

    default:
	break;
  }

  if (Order) {
    switch (tsScale) {
      case 'custom_daily':
	var Date = (Start_Year+formObj.year.selectedIndex)*12*custom_days + formObj.month.selectedIndex*custom_days+formObj.day.selectedIndex+Order;
	if (Date>=Date_start && Date<=Date_end) {
	  formObj.year.selectedIndex = Math.floor(Date/12/custom_days)-Start_Year;
	  formObj.month.selectedIndex = Math.floor((Date%(12*custom_days))/custom_days);
	  formObj.day.selectedIndex = Date%custom_days;
	}
	break;

      case 'daily':
	var Date = (Start_Year+formObj.year.selectedIndex)*365 + sdays[formObj.month.selectedIndex]+formObj.day.selectedIndex+Order;
	if (Date>=Date_start && Date<=Date_end) {
	  var yr = Math.floor(Date/365)-Start_Year;
	  if (yr != formObj.year.selectedIndex) {formObj.year.selectedIndex = yr; month_onchange(tsScale,button)}
	  else {formObj.year.selectedIndex = yr;}
	  var days = Date - Math.floor(Date/365)*365;
	  var m_ind = 0;
	  while (sdays[m_ind] <= days) {m_ind++;};
	  if (m_ind-1 != formObj.month.selectedIndex) {formObj.month.selectedIndex = m_ind-1; month_onchange(tsScale,button)}
	  else {formObj.month.selectedIndex = m_ind-1;}
	  formObj.day.selectedIndex = days - sdays[m_ind-1];
	}
	break;

      case 'daily_clim':
	var Date = sdays[formObj.month.selectedIndex]+formObj.day.selectedIndex+Order;
	if (Date>=Date_start && Date<=Date_end) {
	  var days = Date;
	  var m_ind = 0;
	  while (sdays[m_ind] <= days) {m_ind++;};
	  if (m_ind-1 != formObj.month.selectedIndex) {formObj.month.selectedIndex = m_ind-1; month_onchange(tsScale,button)}
	  else {formObj.month.selectedIndex = m_ind-1;}
	  formObj.day.selectedIndex = days - sdays[m_ind-1];
	}
	break;

      case 'monthly':
	var Date = (Start_Year+formObj.year.selectedIndex)*12 + formObj.month.selectedIndex+Order;
	if (Date>=Date_start && Date<=Date_end) {
	  formObj.year.selectedIndex = Math.floor(Date/12)-Start_Year;
	  formObj.month.selectedIndex = Date%12;
	}
	break;

      case 'monthly_clim':
	var Date = formObj.month.selectedIndex+Order;
	if (Date>=Date_start && Date<=Date_end) { formObj.month.selectedIndex = Date%12; }
	break;

      case 'yearly':
	var Date = Date_start+formObj.year.selectedIndex+Order;
	if (Date>=Date_start && Date<=Date_end) { formObj.year.selectedIndex = Date-Date_start; }
	break;

      case 'decadal':
	var Date = Date_start+formObj.year.selectedIndex+Order;
	if (Date>=Date_start && Date<=Date_end) { formObj.year.selectedIndex = Date-Date_start; }
	break;

      default: break;
    }
  }

  load_map();
}

function  month_onchange(tsScale,button) {
  var formObj = button.form;
  if (tsScale == 'daily' && formObj.day.length < 28) {
    tsScale = 'custom_daily';
    custom_days = formObj.day.length;
  }


  switch (tsScale) {
    case 'custom_daily':
	if (formObj.year.options[formObj.year.selectedIndex].value == String(Start_Year)) {
		if (formObj.month.selectedIndex <= Start_Month_1) {
		  formObj.month.selectedIndex = Start_Month_1;
		  var min_day_index = 0;
		  while (formObj.day.options[min_day_index].value < Start_Month_Min_Day) {min_day_index++;}
		  if (formObj.day.selectedIndex < min_day_index) formObj.day.selectedIndex = min_day_index;
		}
	}
	if (formObj.year.options[formObj.year.selectedIndex].value == String(End_Year)) {
		if (formObj.month.selectedIndex >= End_Month_1) {
		  formObj.month.selectedIndex = End_Month_1;
		  var max_day_index = 0;
		  while (formObj.day.options[max_day_index].value < End_Month_Max_Day)   {max_day_index++;}
		  if (formObj.day.selectedIndex > max_day_index) formObj.day.selectedIndex = max_day_index;
		}
	}
	break;

    case 'daily':
	var dmax,dmin = 0;
	if (formObj.year.options[formObj.year.selectedIndex].value == String(Start_Year)) {
		if (formObj.month.selectedIndex <= Start_Month_1) {
		  formObj.month.selectedIndex = Start_Month_1; dmin = Start_Month_Min_Day;
		}
	}
	if (formObj.year.options[formObj.year.selectedIndex].value == String(End_Year)) {
		if (formObj.month.selectedIndex >= End_Month_1) {
		  formObj.month.selectedIndex = End_Month_1; dmax = End_Month_Max_Day;
		}
	}

	var mnth = formObj.month.selectedIndex;
	var days = (mnth == 1) ? month[mnth]-Math.min(1,formObj.year.options[formObj.year.selectedIndex].value%4) : month[mnth];
	dmax = (dmax) ? dmax : days;
	var dday = Math.min(dmax,formObj.day.options[formObj.day.selectedIndex].text);
	dday = Math.max(dmin,dday);
	formObj.day.length = days;
	formObj.day.options[dday-1].selected  = true;
	for (i=0; i<days; i++){
	  formObj.day.options[i].value = day[i];
	  formObj.day.options[i].text  = i+1;
	}
	break;

    case 'daily_clim':
	var dmax,dmin = 0;
	if (formObj.month.selectedIndex <= Start_Month_1) {
	  formObj.month.selectedIndex = Start_Month_1; dmin = Start_Month_Min_Day;
	}
	if (formObj.month.selectedIndex >= End_Month_1) {
	  formObj.month.selectedIndex = End_Month_1; dmax = End_Month_Max_Day;
	}

	var mnth = formObj.month.selectedIndex;
	var days = (mnth == 1) ? 28 : month[mnth];
	dmax = (dmax) ? dmax : days;
	var dday = Math.min(dmax,formObj.day.options[formObj.day.selectedIndex].text);
	dday = Math.max(dmin,dday);
	formObj.day.length = days;
	formObj.day.options[dday-1].selected  = true;
	for (i=0; i<days; i++){
	  formObj.day.options[i].value = day[i];
	  formObj.day.options[i].text  = i+1;
	}
	break;

    case 'monthly':
	if (formObj.year.options[formObj.year.selectedIndex].value == String(Start_Year)) {
		if (formObj.month.selectedIndex < Start_Month_1) formObj.month.selectedIndex = Start_Month_1;
	}
	if (formObj.year.options[formObj.year.selectedIndex].value == String(End_Year)) {
		if (formObj.month.selectedIndex > End_Month_1) formObj.month.selectedIndex = End_Month_1;
	}
	break;

    case 'monthly_clim': return false; break;
    case 'yearly': return false; break;
    case 'decadal': return false; break;
    default: break;
  }
}

function  start_month_onchange(tsScale,button) {
  var formObj = button.form;
  if (tsScale == 'daily' && formObj.day.length < 28) {
    tsScale = 'custom_daily';
    custom_days = formObj.day.length;
  }

  switch (tsScale) {
    case 'custom_daily':
	if (formObj.start_year.options[formObj.start_year.selectedIndex].value == String(Start_Year)) {
		if (formObj.start_month.selectedIndex <= Start_Month_1) {
		  formObj.start_month.selectedIndex = Start_Month_1;
		  var min_day_index = 0;
		  while (formObj.day.options[min_day_index].value < Start_Month_Min_Day) {min_day_index++;}
		  if (formObj.start_day.selectedIndex < min_day_index) formObj.start_day.selectedIndex = min_day_index;
		}
	}
	if (formObj.start_year.options[formObj.start_year.selectedIndex].value == String(End_Year)) {
		if (formObj.start_month.selectedIndex >= End_Month_1) {
		  formObj.start_month.selectedIndex = End_Month_1;
		  var max_day_index = 0;
		  while (formObj.day.options[max_day_index].value < End_Month_Max_Day)   {max_day_index++;}
		  if (formObj.start_day.selectedIndex > max_day_index) formObj.start_day.selectedIndex = max_day_index;
		}
	}

	if (formObj.end_year.selectedIndex*12*custom_days + formObj.end_month.selectedIndex*custom_days + formObj.end_day.selectedIndex < formObj.start_year.selectedIndex*12*custom_days + formObj.start_month.selectedIndex*custom_days + formObj.start_day.selectedIndex)
	{
	  formObj.end_month.selectedIndex = formObj.start_month.selectedIndex;
	  formObj.end_day.selectedIndex = formObj.start_day.selectedIndex;
	}
	break;

    case 'daily':
	var dmax,dmin = 0;
	if (formObj.start_year.options[formObj.start_year.selectedIndex].value == String(Start_Year)) {
		if (formObj.start_month.selectedIndex <= Start_Month_1) {formObj.start_month.selectedIndex = Start_Month_1; dmin = Start_Month_Min_Day;}
	}
	if (formObj.start_year.options[formObj.start_year.selectedIndex].value == String(End_Year)) {
		if (formObj.start_month.selectedIndex >= End_Month_1) {formObj.start_month.selectedIndex = End_Month_1; dmax = End_Month_Max_Day;}
	}

	if (formObj.end_year.selectedIndex*12 + formObj.end_month.selectedIndex < formObj.start_year.selectedIndex*12 + formObj.start_month.selectedIndex)
	{
	  formObj.end_month.selectedIndex = formObj.start_month.selectedIndex;
	}
	var mnth = formObj.start_month.selectedIndex;
	var days = (mnth == 1) ? month[mnth]-Math.min(1,formObj.start_year.options[formObj.start_year.selectedIndex].value%4) : month[mnth];
	dmax = (dmax) ? dmax : days;
	var dday = Math.min(dmax,formObj.start_day.options[formObj.start_day.selectedIndex].text);
	dday = Math.max(dmin,dday);
	formObj.start_day.length = days;
	formObj.start_day.options[dday-1].selected  = true;
	for (i=0; i<days; i++){
	  formObj.start_day.options[i].value = day[i];
	  formObj.start_day.options[i].text  = i+1;
	}
	if (formObj.end_year.selectedIndex*365 + formObj.end_month.selectedIndex*30 + formObj.end_day.selectedIndex < formObj.start_year.selectedIndex*365 + formObj.start_month.selectedIndex*30 + formObj.start_day.selectedIndex)
	{
	  formObj.end_day.selectedIndex = formObj.start_day.selectedIndex;
	}
	end_month_onchange(tsScale,button);
	break;

    case 'daily_clim':
	var dmax,dmin = 0;
	if (formObj.start_month.selectedIndex <= Start_Month_1) {formObj.start_month.selectedIndex = Start_Month_1; dmin = Start_Month_Min_Day;}
	if (formObj.start_month.selectedIndex >= End_Month_1) {formObj.start_month.selectedIndex = End_Month_1; dmax = End_Month_Max_Day;}

	if (formObj.end_month.selectedIndex < formObj.start_month.selectedIndex)
	{
	  formObj.end_month.selectedIndex = formObj.start_month.selectedIndex;
	}
	var mnth = formObj.start_month.selectedIndex;
	var days = (mnth == 1) ? 28 : month[mnth];
	dmax = (dmax) ? dmax : days;
	var dday = Math.min(dmax,formObj.start_day.options[formObj.start_day.selectedIndex].text);
	dday = Math.max(dmin,dday);
	formObj.start_day.length = days;
	formObj.start_day.options[dday-1].selected  = true;
	for (i=0; i<days; i++){
	  formObj.start_day.options[i].value = day[i];
	  formObj.start_day.options[i].text  = i+1;
	}
	if (formObj.end_month.selectedIndex*30 + formObj.end_day.selectedIndex < formObj.start_month.selectedIndex*30 + formObj.start_day.selectedIndex)
	{
	  formObj.end_day.selectedIndex = formObj.start_day.selectedIndex;
	}
	end_month_onchange(tsScale,button);
	break;

    case 'monthly':
	if (formObj.start_year.options[formObj.start_year.selectedIndex].value == String(Start_Year)) {
		if (formObj.start_month.selectedIndex < Start_Month_1) formObj.start_month.selectedIndex = Start_Month_1;
	}
	if (formObj.start_year.options[formObj.start_year.selectedIndex].value == String(End_Year)) {
		if (formObj.start_month.selectedIndex > End_Month_1) formObj.start_month.selectedIndex = End_Month_1;
	}

	if (formObj.end_year.selectedIndex*12 + formObj.end_month.selectedIndex < formObj.start_year.selectedIndex*12 + formObj.start_month.selectedIndex)
	{
	  formObj.end_month.selectedIndex = formObj.start_month.selectedIndex;
	}
	break;

    case 'monthly_clim':
	if (formObj.end_month.selectedIndex < formObj.start_month.selectedIndex)
	    formObj.end_month.selectedIndex = formObj.start_month.selectedIndex;
	break;

    default: break;
  }
}

function  end_month_onchange(tsScale,button) {
  var formObj = button.form;
  if (tsScale == 'daily' && formObj.day.length < 28) {
    tsScale = 'custom_daily';
    custom_days = formObj.day.length;
  }

  switch (tsScale) {
    case 'custom_daily':
	if (formObj.end_year.options[formObj.end_year.selectedIndex].value == String(Start_Year)) {
		if (formObj.end_month.selectedIndex <= Start_Month_1) {
		  formObj.end_month.selectedIndex = Start_Month_1;
		  var min_day_index = 0;
		  while (formObj.day.options[min_day_index].value < Start_Month_Min_Day) {min_day_index++;}
		  if (formObj.end_day.selectedIndex < min_day_index) formObj.end_day.selectedIndex = min_day_index;
		}
	}
	if (formObj.end_year.options[formObj.end_year.selectedIndex].value == String(End_Year)) {
		if (formObj.end_month.selectedIndex >= End_Month_1) {
		  formObj.end_month.selectedIndex = End_Month_1;
		  var max_day_index = 0;
		  while (formObj.day.options[max_day_index].value < End_Month_Max_Day)   {max_day_index++;}
		  if (formObj.end_day.selectedIndex > max_day_index) formObj.end_day.selectedIndex = max_day_index;
		}
	}

	if (formObj.end_year.selectedIndex*12*custom_days + formObj.end_month.selectedIndex*custom_days + formObj.end_day.selectedIndex < formObj.start_year.selectedIndex*12*custom_days + formObj.start_month.selectedIndex*custom_days + formObj.start_day.selectedIndex)
	{
	  formObj.start_month.selectedIndex = formObj.end_month.selectedIndex;
	  formObj.start_day.selectedIndex = formObj.end_day.selectedIndex;
	}
	break;

    case 'daily':
	var dmax,dmin = 0;
	if (formObj.end_year.options[formObj.end_year.selectedIndex].value == String(Start_Year)) {
		if (formObj.end_month.selectedIndex <= Start_Month_1) {formObj.end_month.selectedIndex = Start_Month_1; dmin = Start_Month_Min_Day;};
	}
	if (formObj.end_year.options[formObj.end_year.selectedIndex].value == String(End_Year)) {
		if (formObj.end_month.selectedIndex >= End_Month_1) {formObj.end_month.selectedIndex = End_Month_1; dmax = End_Month_Max_Day;};
	}

	if (formObj.end_year.selectedIndex*12 + formObj.end_month.selectedIndex < formObj.start_year.selectedIndex*12 + formObj.start_month.selectedIndex)
	{
	  formObj.start_month.selectedIndex = formObj.end_month.selectedIndex;
	}
	var mnth = formObj.end_month.selectedIndex;
	var days = (mnth == 1) ? month[mnth]-Math.min(1,formObj.end_year.options[formObj.end_year.selectedIndex].value%4) : month[mnth];
	dmax = (dmax) ? dmax : days;
	var dday = Math.min(dmax,formObj.end_day.options[formObj.end_day.selectedIndex].text);
	dday = Math.max(dmin,dday);
	formObj.end_day.length = days;
	formObj.end_day.options[dday-1].selected  = true;
	for (i=0; i<days; i++){
	  formObj.end_day.options[i].value = day[i];
	  formObj.end_day.options[i].text  = i+1;
	}
	if (formObj.end_year.selectedIndex*365 + formObj.end_month.selectedIndex*30 + formObj.end_day.selectedIndex < formObj.start_year.selectedIndex*365 + formObj.start_month.selectedIndex*30 + formObj.start_day.selectedIndex)
	{
	  formObj.start_day.selectedIndex = formObj.end_day.selectedIndex;
	}
	break;

    case 'daily_clim':
	var dmax,dmin = 0;
	if (formObj.end_month.selectedIndex <= Start_Month_1) {formObj.end_month.selectedIndex = Start_Month_1; dmin = Start_Month_Min_Day;};
	if (formObj.end_month.selectedIndex >= End_Month_1) {formObj.end_month.selectedIndex = End_Month_1; dmax = End_Month_Max_Day;};

	if (formObj.end_month.selectedIndex < formObj.start_month.selectedIndex)
	{
	  formObj.start_month.selectedIndex = formObj.end_month.selectedIndex;
	}
	var mnth = formObj.end_month.selectedIndex;
	var days = (mnth == 1) ? 28 : month[mnth];
	dmax = (dmax) ? dmax : days;
	var dday = Math.min(dmax,formObj.end_day.options[formObj.end_day.selectedIndex].text);
	dday = Math.max(dmin,dday);
	formObj.end_day.length = days;
	formObj.end_day.options[dday-1].selected  = true;
	for (i=0; i<days; i++){
	  formObj.end_day.options[i].value = day[i];
	  formObj.end_day.options[i].text  = i+1;
	}
	if (formObj.end_month.selectedIndex*30 + formObj.end_day.selectedIndex < formObj.start_month.selectedIndex*30 + formObj.start_day.selectedIndex)
	{
	  formObj.start_day.selectedIndex = formObj.end_day.selectedIndex;
	}
	break;

    case 'monthly':
	if (formObj.end_year.options[formObj.end_year.selectedIndex].value == String(Start_Year)) {
		if (formObj.end_month.selectedIndex <= Start_Month_1) formObj.end_month.selectedIndex = Start_Month_1;
	}
	if (formObj.end_year.options[formObj.end_year.selectedIndex].value == String(End_Year)) {
		if (formObj.end_month.selectedIndex >= End_Month_1) formObj.end_month.selectedIndex = End_Month_1;
	}

	if (formObj.end_year.selectedIndex*12 + formObj.end_month.selectedIndex < formObj.start_year.selectedIndex*12 + formObj.start_month.selectedIndex)
	{
	  formObj.start_month.selectedIndex = formObj.end_month.selectedIndex;
	}
	break;

    case 'monthly_clim':
	if (formObj.start_month.selectedIndex > formObj.end_month.selectedIndex)
	    formObj.start_month.selectedIndex = formObj.end_month.selectedIndex;
	break;

    default: break;
  }
}

function  start_year_onchange(tsScale,button) {
  var formObj = button.form;

  if (formObj.end_year.selectedIndex < formObj.start_year.selectedIndex) formObj.end_year.selectedIndex = formObj.start_year.selectedIndex;
  start_month_onchange(tsScale,button);
}

function  end_year_onchange(tsScale,button) {
  var formObj = button.form;

  if (formObj.end_year.selectedIndex < formObj.start_year.selectedIndex) formObj.start_year.selectedIndex = formObj.end_year.selectedIndex;
  end_month_onchange(tsScale,button); start_month_onchange(tsScale,button);
}

/****************************************************************/
	/* Animation Functions */

var anim = false; var i_anim = 0; var anim_r = 0;
var anim_start; var anim_end = 0; var Anim_im = new Array();
var tm_step = 0; var animTime = 0;
var TS_SCALE,TS_FORM;

function Anim_onclick(tsScale,Data,ts_form) {
  TS_SCALE= tsScale;
  TS_FORM = ts_form;
  if (TS_SCALE == 'daily' && TS_FORM.day.length < 28) {
    TS_SCALE = 'custom_daily';
    custom_days = TS_FORM.day.length;
  }

  if (!anim) {
    anim = true;
    i_anim = 1;
    Data.clear();

    switch (TS_SCALE) {
      case 'custom_daily':
        anim_start = (Start_Year+TS_FORM.start_year.selectedIndex)*12*custom_days + TS_FORM.start_month.selectedIndex*custom_days + TS_FORM.start_day.selectedIndex;
        anim_end   = (Start_Year+TS_FORM.end_year.selectedIndex)*12*custom_days + TS_FORM.end_month.selectedIndex*custom_days + TS_FORM.end_day.selectedIndex;
	break;

      case 'daily':
	anim_start = (Start_Year+TS_FORM.start_year.selectedIndex)*365 + sdays[TS_FORM.start_month.selectedIndex]+TS_FORM.start_day.selectedIndex;
	anim_end   = (Start_Year+TS_FORM.end_year.selectedIndex)*365 + sdays[TS_FORM.end_month.selectedIndex]+TS_FORM.end_day.selectedIndex;
	break;

      case 'daily_clim':
	anim_start = sdays[TS_FORM.start_month.selectedIndex]+TS_FORM.start_day.selectedIndex;
	anim_end   = sdays[TS_FORM.end_month.selectedIndex]+TS_FORM.end_day.selectedIndex;
	break;

      case 'monthly':
        anim_start = (Start_Year+TS_FORM.start_year.selectedIndex)*12 + TS_FORM.start_month.selectedIndex;
        anim_end   = (Start_Year+TS_FORM.end_year.selectedIndex)*12 + TS_FORM.end_month.selectedIndex;
	break;

      case 'monthly_clim':
	anim_start = TS_FORM.start_month.selectedIndex;
	anim_end   = TS_FORM.end_month.selectedIndex;
	anim_end += (anim_start > anim_end) ? 12 : 0;
	break;

      case 'yearly':
	anim_start = TS_FORM.start_year.selectedIndex;
	anim_end   = TS_FORM.end_year.selectedIndex;
	break;

      case 'decadal':
	anim_start = TS_FORM.start_year.selectedIndex;
	anim_end   = TS_FORM.end_year.selectedIndex;
	break;

      default: break;
    }

    if (anim_length_check(anim_end - anim_start + 1)) {
	Anim_im = new Array(anim_end - anim_start + 1);
	document.images["ss_anim"].src = Stop_Anm.src; tm_step = 100; get_anim();
    }
    else { stop_anim(); }
  }
  else { stop_anim(); }
}

function get_anim() {
  if (i_anim>1 && !Anim_im[i_anim - 2].complete) return false;
  if (i_anim && i_anim<=anim_end-anim_start+1) {
    Anim_im[i_anim - 1] = new Image();
    var Date;

    switch (TS_SCALE) {
      case 'custom_daily':
	TS_FORM.year.selectedIndex = Math.floor((anim_start+i_anim-1)/12/custom_days)-Start_Year;
	TS_FORM.month.selectedIndex = Math.floor(((anim_start+i_anim-1)%(12*custom_days))/custom_days);
	TS_FORM.day.selectedIndex = (anim_start+i_anim-1)%custom_days;
	Date = TS_FORM.year.options[TS_FORM.year.selectedIndex].value + "-" +
		TS_FORM.month.options[TS_FORM.month.selectedIndex].value + "-" +
		TS_FORM.day.options[TS_FORM.day.selectedIndex].value;
	break;

      case 'daily':
	var yr = Math.floor((anim_start+i_anim - 1)/365)-Start_Year;
	if (yr != TS_FORM.year.selectedIndex) {TS_FORM.year.selectedIndex = yr; month_onchange(TS_SCALE,TS_FORM.month)}
	else {TS_FORM.year.selectedIndex = yr;}
	var days = (anim_start+i_anim-1) - Math.floor((anim_start+i_anim-1)/365)*365;
	var m_ind = 0;
	while (sdays[m_ind] <= days) {m_ind++;};
	if (m_ind-1 != TS_FORM.month.selectedIndex) {TS_FORM.month.selectedIndex = m_ind-1; month_onchange(TS_SCALE,TS_FORM.month)}
	else {TS_FORM.month.selectedIndex = m_ind-1;}
	TS_FORM.day.selectedIndex = days - sdays[m_ind-1];
	Date = TS_FORM.year.options[TS_FORM.year.selectedIndex].value + "-" +
		TS_FORM.month.options[TS_FORM.month.selectedIndex].value + "-" +
		TS_FORM.day.options[TS_FORM.day.selectedIndex].value;
	break;

      case 'daily_clim':
	var days = anim_start+i_anim-1;
	var m_ind = 0;
	while (sdays[m_ind] <= days) {m_ind++;};
	if (m_ind-1 != TS_FORM.month.selectedIndex) {TS_FORM.month.selectedIndex = m_ind-1; month_onchange(TS_SCALE,TS_FORM.month)}
	else {TS_FORM.month.selectedIndex = m_ind-1;}
	TS_FORM.day.selectedIndex = days - sdays[m_ind-1];
	Date = "0000-" +
		TS_FORM.month.options[TS_FORM.month.selectedIndex].value + "-" +
		TS_FORM.day.options[TS_FORM.day.selectedIndex].value;
	break;

      case 'monthly':
        TS_FORM.year.selectedIndex = Math.floor((anim_start+i_anim-1)/12)-Start_Year;
        TS_FORM.month.selectedIndex = (anim_start+i_anim-1)%12;
        Date = TS_FORM.year.options[TS_FORM.year.selectedIndex].value + "-" + TS_FORM.month.options[TS_FORM.month.selectedIndex].value + "-00";
	break;

      case 'monthly_clim':
	TS_FORM.month.selectedIndex = (anim_start+i_anim-1)%12;
	Date = "0000-" + TS_FORM.month.options[TS_FORM.month.selectedIndex].value + "-00";
	break;

      case 'yearly':
	TS_FORM.year.selectedIndex = anim_start+i_anim-1;
	Date = TS_FORM.year.options[TS_FORM.year.selectedIndex].value + "-00-00";
	break;

      case 'decadal':
	TS_FORM.year.selectedIndex = anim_start+i_anim-1;
	Date = TS_FORM.year.options[TS_FORM.year.selectedIndex].value + "-00-00";
	break;

      default: break;
    }

    Anim_im[i_anim - 1].src = img_0.src.replace(/\d{4}-\d{2}-\d{2}/,Date);
    img_0.src = Anim_im[i_anim - 1].src;
    i_anim++;
    if (!animTime) {animTime = setInterval("get_anim()",tm_step);}
  }
  else {
    if (animTime) {clearInterval(animTime); animTime = 0;}
    tm_step = 1000; anim_r = anim_end-anim_start+1;
    document.images["ss_anim"].src = Stop_Anm.src;
    document.images["faster"].src = Faster.src;
    document.images["slower"].src = Slower.src;
    run_anim();
  }
}

function run_anim() {
  if (anim_r) {
    if (animTime) {clearTimeout(animTime); animTime = 0;}
    img_0.src = Anim_im[anim_r - 1].src;

    switch (TS_SCALE) {
      case 'custom_daily':
	TS_FORM.year.selectedIndex = Math.floor((anim_start+anim_r-1)/12/custom_days)-Start_Year;
	TS_FORM.month.selectedIndex = Math.floor(((anim_start+anim_r-1)%(12*custom_days))/custom_days);
	TS_FORM.day.selectedIndex = (anim_start+anim_r-1)%custom_days;
	break;

      case 'daily':
	var yr = Math.floor((anim_start+anim_r-1)/365)-Start_Year;
	if (yr != TS_FORM.year.selectedIndex) {TS_FORM.year.selectedIndex = yr; month_onchange(TS_SCALE,TS_FORM.month)}
	else {TS_FORM.year.selectedIndex = yr;}
	var days = (anim_start+anim_r - 1) - Math.floor((anim_start+anim_r-1)/365)*365;
	var m_ind = 0;
	while (sdays[m_ind] <= days) {m_ind++;};
	if (m_ind-1 != TS_FORM.month.selectedIndex) {TS_FORM.month.selectedIndex = m_ind-1; month_onchange(TS_SCALE,TS_FORM.month)}
	else {TS_FORM.month.selectedIndex = m_ind-1;}
	TS_FORM.day.selectedIndex = days - sdays[m_ind-1];
	break;

      case 'daily_clim':
	var days = anim_start+anim_r-1;
	var m_ind = 0;
	while (sdays[m_ind] <= days) {m_ind++;};
	if (m_ind-1 != TS_FORM.month.selectedIndex) {TS_FORM.month.selectedIndex = m_ind-1; month_onchange(TS_SCALE,TS_FORM.month)}
	else {TS_FORM.month.selectedIndex = m_ind-1;}
	TS_FORM.day.selectedIndex = days - sdays[m_ind-1];
	break;

      case 'monthly':
        TS_FORM.year.selectedIndex = Math.floor((anim_start+anim_r-1)/12)-Start_Year;
        TS_FORM.month.selectedIndex = (anim_start+anim_r-1)%12;
	break;

      case 'monthly_clim':
	TS_FORM.month.selectedIndex = (anim_start+anim_r-1)%12;
	break;

      case 'yearly':
	TS_FORM.year.selectedIndex = anim_start+anim_r-1;
	break;

      case 'decadal':
	TS_FORM.year.selectedIndex = anim_start+anim_r-1;
	break;

      default: break;
    }

    anim_r = (anim_r%(anim_end-anim_start+1)) + 1;
    animTime = setTimeout("run_anim()",tm_step);
  }
}

function Slow_onmousedown() {
  if (anim_r) {
    document.images["slower"].src = Slower_p.src;
    tm_step *= 1.5;
    tmSlow = setTimeout("document.images['slower'].src = Slower.src;",200);
  }
}

function Fast_onmousedown() {
  if (anim_r) {
    document.images["faster"].src = Faster_p.src;
    tm_step /= 1.5;
    tmFast = setTimeout("document.images['faster'].src = Faster.src;",200);
  }
}

function stop_anim() {
  if (!anim) return false;
  anim = false; i_anim = 0; Anim_im = new Array();

  if (document.images["ss_anim"]) {
    document.images["ss_anim"].src = Start_Anm.src;
    document.images["faster"].src = Empty_Im.src;
    document.images["slower"].src = Empty_Im.src;
  }
  if (animTime) {
    anim_r = 0; clearTimeout(animTime); clearInterval(animTime); animTime = 0;
  }
}

function anim_length_check(len) {
  if (len <= 31) return true;
  return confirm("An animation you have requested is too long ("+len+" frames/data layers).\nIt might take up to "+len*3/60+" minutes to make.\n\nDo you really want to run it?");
}

/****************************************************************/
	/* Time Series Graph Functions */

var ts_graph_win = 0;
var windowName,params,ts_graph_url;

function Get_TS_Graph(Data,Point,tsScale,ts_form) {

		// Get Start and End Dates for the Graph
  var Dates = Array(2);
  switch (tsScale) {
    case 'daily':
      Dates[0] = ts_form.start_year.options[ts_form.start_year.selectedIndex].value + "-" + ts_form.start_month.options[ts_form.start_month.selectedIndex].value + "-" + ts_form.start_day.options[ts_form.start_day.selectedIndex].value;
      Dates[1] = ts_form.end_year.options[ts_form.end_year.selectedIndex].value + "-" + ts_form.end_month.options[ts_form.end_month.selectedIndex].value + "-" + ts_form.end_day.options[ts_form.end_day.selectedIndex].value;
      break;

    case 'daily_clim':
      Dates[0] = "0000-" + ts_form.start_month.options[ts_form.start_month.selectedIndex].value + "-" + ts_form.start_day.options[ts_form.start_day.selectedIndex].value;
      Dates[1] = "0000-" + ts_form.end_month.options[ts_form.end_month.selectedIndex].value + "-" + ts_form.end_day.options[ts_form.end_day.selectedIndex].value;
      break;

    case 'monthly':
      Dates[0] = ts_form.start_year.options[ts_form.start_year.selectedIndex].value + "-" + ts_form.start_month.options[ts_form.start_month.selectedIndex].value + "-00";
      Dates[1] = ts_form.end_year.options[ts_form.end_year.selectedIndex].value + "-" + ts_form.end_month.options[ts_form.end_month.selectedIndex].value + "-00";
      break;

    case 'monthly_clim':
      Dates[0] = "0000-" + ts_form.start_month.options[ts_form.start_month.selectedIndex].value + "-00";
      Dates[1] = "0000-" + ts_form.end_month.options[ts_form.end_month.selectedIndex].value + "-00";
      break;

    case 'yearly':
      Dates[0] = ts_form.start_year.options[ts_form.start_year.selectedIndex].value + "-00-00";
      Dates[1] = ts_form.end_year.options[ts_form.end_year.selectedIndex].value + "-00-00";
      break;

    case 'decadal':
      Dates[0] = ts_form.start_year.options[ts_form.start_year.selectedIndex].value + "-00-00";
      Dates[1] = ts_form.end_year.options[ts_form.end_year.selectedIndex].value + "-00-00";
      break;

    default: alert("Failed to get dates for TS Graph");
  }

		// Open a window for the Graph
  windowName   = "TS_Graph";
  params = "toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=1,resizable=1,width=700,height=700";
  ts_graph_url = "/cgi-bin/graph_page.pl?type="+Data+"&date="+Dates.join("_")+'&point='+Point;

  if ((ts_graph_win) && (!ts_graph_win.closed)) ts_graph_win.focus();
  setTimeout("ts_graph_win = window.open(ts_graph_url, windowName , params);",200);

  return false;
}
