// @cvs-id $Id: calendar.js,v 1.3 2007/05/01 15:10:04 nsadmin Exp $ $Name: bridge-release-2_7alpha2 $

// Prevent loading multiple times
if (!calendarJsRun) {
  var calendarJsRun = 1;

  var Userdate; // The user-viewable field that corresponds to the window
  var date; // The hidden field that corresponds to the window
  
  // Create a new window and tie it to the date field
  function newwindow(Userobject, object )
  {
    date = object;
    Userdate = Userobject;
    var newwin = window.open('/global/calendar/popupcal','popupcal','width=215,height=240,resizable=yes, titlebar=no,toolbar=no,location=no,scrollbars=no,status=no');
    newwin.focus();
  } 

  // More options than newwindow, such as for the clock popup
  function calWindow(url, Userobject, object, height )
  {	
    if (!height) {
      height = 240;
    }
    date = object;
    Userdate = Userobject;
    var newwin = window.open(url,'popupcal','width=215,height=' + height + ',resizable=yes, titlebar=no,toolbar=no,location=no,scrollbars=yes,status=no');
    newwin.focus();
  } 

  // Put the value in the user-visible field, and convert for the
  // hidden field.
  function FillDate (value)
  {
    Userdate.value = value;
    date.value = ReFormatDate (value);
    // Does this work on all browsers?  Onchange is a string, not a function, right?
    if (Userdate.onchange) {	
      Userdate.onchange();
    }
  }

  // Fill the hidden value directly, w/o conversions
  function ClockFillDate (value)
  {	
    date.value = value;
  }

  // Make sure user-input follows the right format
  function testTime(UserDate, time, force) {

    is_number = "";
    var output = "";
    var AMPM = "";
    if (time.length == 0) {
      return;
    }
	
    if (!UserDate.oldLen) {
      UserDate.oldLen=0;
    } else if (UserDate.oldLen > UserDate.value.length) {
      UserDate.oldLen = UserDate.value.length;
      return;
    }

    for (i = 0; i < time.length; i++) {
      x = time.substring(i, i + 1);
      if (output.length < 6) {
	// Test that we have a number
	num = new Number(x);
	if (num == x) {
	  // Do formatting/checking as typing happens
	  switch (output.length) {

	  case 0:
	    if (output.length == 0 && x < 3) {
	      output += x;
	    }
	    break;

	  case 1:
	    x = output * 10 + num;
	    if (x == 0) {
	      if (time.length >= 5 && force) {
		output = "12";
		AMPM = "AM";
	      } else {
		output = "00:";
	      }
	    } else if (x <= 12 && x > 0) {
	      if (x < 10) {
		output = "0" + x;
	      } else {
		output = "" + x;
	      }
	    } else if (x < 24 && x > 12) {
	      if (time.length >= 5 && force) {
		x -= 12;
		AMPM = "PM";
	      }
	      if (x < 10) {
		output = "0" + x;
	      } else {
		output = "" + x;
	      }
	    } else if (x >= 24 && x < 30) {
	      output = "2";
	    }
	    if (output.length == 2) {
	      output += ":";
	    }
	    break;

	  case 2:
	    output += ":";
	    // Is there no break here on purpose?
				
	  case 3: 
	    if (num <= 6) {
	      output += num;
	    }
	    break;			

	  case 4:
	    output += num; 
	    output += " ";
	    if (AMPM != "") {
	      output += AMPM;
	      UserDate.value = output;
	      UserDate.oldLen = UserDate.value.length;
	      return;
	    }
	    break;

	  case 5:
	    output += " ";
	    output += AMPM;
	    UserDate.value = output;
	    UserDate.oldLen = UserDate.value.length;
	    return;
	    break;
	  } // switch
	} // if
      } else if (output.length == 6) {
	if (x == "P" || x == "p") {
	  output += "PM";
	} 
	if (x == "A" || x == "a") {	
	  output += "AM";
	}
      }
    }
    if (force) {
      if (output.length == 5) {
	output += " AM";
      }
      if (output.length == 6) {
	output += "AM";
      }
    }
    UserDate.value = output;
    UserDate.oldLen = UserDate.value.length;
  }

  // Make sure user-input follows the right format
  function testdate (Userdate, date)
  {
    var NumberOfSlash = 0;
    var Userdatel;
    var i;
    var NewVal = "";
    var x;
    if (!Userdate.oldLen && Userdate.oldLen != 0)
      {
	Userdate.oldLen=0
	  }
    Userdatel = Userdate.value.length;
	
    if (Userdatel >= Userdate.oldLen)
      {
	for (i = 0; i < Userdatel; i++)
	  {		
	    x = new Number (Userdate.value.substring(i, i+1));
			
	    if (x * 1 == x)
	      {
			
		NewVal += Userdate.value.substring(i, i+1);	
	      }
	    if (NewVal.length == 2 || NewVal.length == 5)
	      {
		NewVal += "/";
			
	      }	
	  }
	Userdate.value = NewVal;
	date.value = ReFormatDate (Userdate.value);
	Userdate.oldLen = NewVal.length;
      }
    else
      {
	Userdate.oldLen = Userdatel;
      }	
    date.value = ReFormatDate (Userdate.value);
  }

  // Take the value from a date input field in "MMDDYYYY" format and add slashes
  function UpdateFormatDate (Date)
  {
    var datel = Date.value.length;
		
    if (datel == 8)
      {
	var month = new String (Date.value.substring (0, 2));
	var day = new String (Date.value.substring (3,5)); 	
	var year = new String (Date.value.substring (6,8)); 	
	year = "20" + year;
	Date.value = month + "/" + day + "/" + year;	
      }		
	
  }

  // Convert MM/DD/YYYY - > YYYY-MM-DD
  function ReFormatDate (DateVal)
  {
    var datel = DateVal.length;
    if (datel == 0)
      {
	return "";
      }
    if (datel != 10 && datel != 8)
      {
	return "bad date";
      }
    var month = new String (DateVal.substring (0, 2));
    var day = new String (DateVal.substring (3,5)); 
    if (datel == 10)
      {
	var year = new String (DateVal.substring (6,10)); 
      }
    else 
      {
	var year = new String (DateVal.substring (6,8)); 	
	year = "20" + year;
      }		
    return (year + "-" + month + "-" + day);
  }

  // Lookup months
  var monthLookup; // Initialize on demand

  function getMonthName(monthNumber) {
    if (!monthLookup)
      monthLookup = new Array("January","February","March","April",
			      "May","June","July","August","September",
			      "October","November","December");

    // Trim leading zero, if any
    if (monthNumber.charAt(0) == "0")
      monthNumber = monthNumber.substr(1);

    return monthLookup[monthNumber];
  }


  // Take a field and return a date object with the date in question
  function dateFieldToObject(fieldId) {
    return new Date(getDateFieldValue(fieldId));
  }

  // Pad a number with zeroes to the correct number of digits (default 2)
  function padLeftWithZeroes(number, digits) {
    if (!digits) digits = 2;
    for (var i = number.toString().length; i < digits; i++) {
      number = "0" + number.toString();
    }
    return number;
  }

  // Trim leading zeroes off of a date
  function trimLeftZeroes(number) {
    number = number.toString();
    while (number.length > 1 && number.charAt(0) == "0")
      number = number.substring(1);
    return number;
  }

  // Take a date object and return the value in MM/DD/YYYY format
  function dateObjectToValue(dateObject) {
    return padLeftWithZeroes(dateObject.getMonth() + 1) + "/" +
      padLeftWithZeroes(dateObject.getDate()) + "/" +
      dateObject.getFullYear();
  }

  // Set date field to a value (visible and hidden), in MM/DD/YYYY format
  function setDateFieldValue(fieldId, dateValue) {
    getByID('User' + fieldId).value = dateValue;
    getByID(fieldId).value = ReFormatDate(dateValue);
  }

  // Get the date field's value, in MM/DD/YYYY format
  function getDateFieldValue(fieldId) {
    return getByID('User' + fieldId).value;
  }
// Definitions for date arithmetic

var oneSecond = 1000; // JavaScript time is measured in milliseconds
var oneMinute = 60 * oneSecond;
var oneHour = 60 * oneMinute;
var oneDay = 24 * oneHour;
var oneWeek = 7 * oneDay;

// Fix for poor support in old browsers, suggested by Quirksmode

if (!Date.prototype.getFullYear) {
  Date.prototype.getFullYear = function() {
    var x = this.getYear() % 100;
    return x + ((x < 38) ? 2000 : 1900);
  }
 }


 } // if (!calendarJsRun)

