
//Return todays date in dd/mm/yyyy format.
function GetTodaysDate(){

    return GetDateInFuture(0);

}// End GetTodaysDate

//========================== function separator ===================================

function GetDateInFuture(AddYears) {
    var current_date = new Date();
    var current_day = current_date.getDate();
    var current_month = current_date.getMonth() + 1;
    var current_year = current_date.getFullYear() + AddYears;

    if (current_day < 10)
        current_day = '0' + current_day;

    if (current_month < 10)
        current_month = '0' + current_month;

    return current_day + '/' + current_month + '/' + current_year;
}

function forceValidDate(dateField) {
    enforceDateFormat(dateField);
       
    if (dateField && !ValidateDate(dateField.value)) {
        alert("Please enter a valid date!");
        dateField.value = "";
    } 
}


function enforceDateFormat(dateField) {

  if (dateField && dateField.value != '') {

    dateField.value = dateField.value.replace(/\./g,"/").replace(/\-/g,"/");
    var dateSplit = dateField.value.split("/")

    if (dateSplit.length == 3) {

      dateField.value = ((dateSplit[0].length ==1) ? "0" + dateSplit[0] : dateSplit[0]) 
                     + "/" 
                     + ((dateSplit[1].length ==1) ? "0" + dateSplit[1] : dateSplit[1]) 
                     + "/" 
                     + ((dateSplit[2].length ==2) ? "20" + dateSplit[2] : dateSplit[2]) 

    } else {
        dateField.value = "";
    }

  }

}// End enforceDateFormat

//========================== function separator ===================================

function ValidateDate(some_date) {

  //This will accept 1 or 2 digits for days and months, and 2 or 4 digits for years. 
  //Examples of acceptable formats: dd/mm/yyyy, dd-mm-yyyy, d/m/yy, d-m-yy.
  var objRegExp = /^((\d{1,2}-){2}|(\d{1,2}\/){2})(\d{2}|\d{4})$/

  //Check to see if in correct format.
  if(!objRegExp.test(some_date))

    return false; //Doesn't match pattern, bad date.

  else {

    var split_char = '/';
    if(some_date.indexOf(split_char) == -1)
      split_char = '-';

    var date_array = some_date.split(split_char); //Split date into day, month, year.
    var some_day = date_array[0];
    var some_month = date_array[1];
    var some_year = date_array[2];
    
    //There's a bug converting '08' & '09' to a integer using the parseInt function in the conventional way, ie. parseInt('08')
    //The workaround is to use parseInt(<my text value>, 10), ie parseInt('08',10).
    //For explanation see http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256C85006A6604, or http://www.irt.org/script/1438.htm
    var intDay = parseInt(some_day,10);
  
    //If 1 digit month entered, pad it out to 2 digits.
    if(some_month.length == 1)
      some_month = '0' + some_month;

    //Create a lookup for months not equal to Feb.
    var arrayLookup = {'01':31, '03':31, '04':30, '05':31, '06':30, '07':31, '08':31, '09':30, '10':31, '11':30, '12':31}

    //Check if year doesn't execeed 2070
    if (parseInt(some_year) > 2070) {
        return false;
    }

    //Check if month value and day value agree.
    if(arrayLookup[some_month] != null) {
      if(intDay <= arrayLookup[some_month] && intDay != 0)
        return true; //Found in lookup table, good date.
    }
    
    //Special check for February.
    var intYear = parseInt(some_year);
    var intMonth = parseInt(some_month);
    if(intMonth == 2) {
      if(((intYear % 4 == 0 && intDay <= 29) || (intYear % 4 != 0 && intDay <=28)) && intDay !=0)
        return true; //February has valid number of days.
    }
  }

  return false; //Any other values, bad date.
 
}// End ValidateDate

//========================== function separator ===================================

//Assumptions: Date is already in a valid format according to ValidateDate function.
//Valid dates are in one of the following formats: dd/mm/yyyy, dd-mm-yyyy, d/m/yy, d-m-yy.
//This function converts all valid date formats into the dd/mm/yyyy format.
function ConvertDateFormat(some_date) {

  var split_char = '/';
  if(some_date.indexOf(split_char) == -1)
    split_char = '-';

  var date_array = some_date.split(split_char); //Split date into day, month, year.
  var some_day = date_array[0];
  var some_month = date_array[1];
  var some_year = date_array[2];

  if(some_day.length == 1)
    some_day = '0' + some_day;

  if(some_month.length == 1)
    some_month = '0' + some_month;

  if(some_year.length == 2)
    some_year = (parseInt(some_year,10) > 90) ? '19' + some_year : '20' + some_year;

  return some_day + '/' + some_month + '/' + some_year;

}// End ConvertDateFormat()

//========================== function separator ===================================

//If date_1 < date_2 then return 0.
//Else if date_1 >= date_2 then return 1.
function CompareDates(date_1,date_2){

  //Now compare the dates.
  if(date_1.getFullYear() < date_2.getFullYear())
    return 0;
  else if(date_1.getFullYear() > date_2.getFullYear())
         return 1; //If selected year > current year then date ok.
       //Years must be the same so check months.
       else if(date_1.getMonth() < date_2.getMonth())
              return 0;
            else if(date_1.getMonth() > date_2.getMonth())
                   return 1; //If selected year = current year and selected month > current month then date ok.
                 //Months must be the same so check days.
                 else if(date_1.getDate() < date_2.getDate())
                        return 0;
                      else 
                        return 1;
                        
}// End CompareDates

//========================== function separator ===================================

//Gets a standard date range value and assigns appropriate dates "To" and "From" date text fields.
//Useful in any search page where you can do a date range search. Eg. "Search Work Requests", "Search Goods Lift Bookings", etc.
function SetDateRange(form_element) {

  switch(form_element.value) {
    case 'Today':
      document.getElementById(from_date_element_id).value = today;
      document.getElementById(to_date_element_id).value = today;
      break;
    case 'Last Week':
      document.getElementById(from_date_element_id).value = last_wk_start;
      document.getElementById(to_date_element_id).value = last_wk_end;
      break;
    case 'Last Month':
      document.getElementById(from_date_element_id).value = last_mth_start;
      document.getElementById(to_date_element_id).value = last_mth_end;
      break;
    case 'Last Year':
        document.getElementById(from_date_element_id).value = last_yr_start;
        document.getElementById(to_date_element_id).value = last_yr_end;
        break;
    case 'Current Month':
      document.getElementById(from_date_element_id).value = this_mth_start;
      document.getElementById(to_date_element_id).value = today;
      break;
    case 'Current Year':
      document.getElementById(from_date_element_id).value = this_yr_start;
      document.getElementById(to_date_element_id).value = today;
      break;
    default:
      document.getElementById(from_date_element_id).value = '';
      document.getElementById(to_date_element_id).value = '';
      break;
  }

}// End SetDateRange




var MONTH_NAMES=new Array('January','February','March','April','May','June','July','August','September','October','November','December','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
var DAY_NAMES=new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sun','Mon','Tue','Wed','Thu','Fri','Sat');
function LZ(x) {return(x<0||x>9?"":"0")+x}


// ------------------------------------------------------------------
// formatDate (date_object, format)
// Returns a date in the output format specified.
// ------------------------------------------------------------------
function formatDate(date,format) {
	format=format+"";
	var result="";
	var i_format=0;
	var c="";
	var token="";
	var y=date.getYear()+"";
	var M=date.getMonth()+1;
	var d=date.getDate();
	var E=date.getDay();
	var H=date.getHours();
	var m=date.getMinutes();
	var s=date.getSeconds();
	var yyyy,yy,MMM,MM,dd,hh,h,mm,ss,ampm,HH,H,KK,K,kk,k;
	// Convert real date parts into formatted versions
	var value=new Object();
	if (y.length < 4) {y=""+(y-0+1900);}
	value["y"]=""+y;
	value["yyyy"]=y;
	value["yy"]=y.substring(2,4);
	value["M"]=M;
	value["MM"]=LZ(M);
	value["MMM"]=MONTH_NAMES[M-1];
	value["NNN"]=MONTH_NAMES[M+11];
	value["d"]=d;
	value["dd"]=LZ(d);
	value["E"]=DAY_NAMES[E+7];
	value["EE"]=DAY_NAMES[E];
	value["H"]=H;
	value["HH"]=LZ(H);
	if (H==0){value["h"]=12;}
	else if (H>12){value["h"]=H-12;}
	else {value["h"]=H;}
	value["hh"]=LZ(value["h"]);
	if (H>11){value["K"]=H-12;} else {value["K"]=H;}
	value["k"]=H+1;
	value["KK"]=LZ(value["K"]);
	value["kk"]=LZ(value["k"]);
	if (H > 11) { value["a"]="PM"; }
	else { value["a"]="AM"; }
	value["m"]=m;
	value["mm"]=LZ(m);
	value["s"]=s;
	value["ss"]=LZ(s);
	while (i_format < format.length) {
		c=format.charAt(i_format);
		token="";
		while ((format.charAt(i_format)==c) && (i_format < format.length)) {
			token += format.charAt(i_format++);
			}
		if (value[token] != null) { result=result + value[token]; }
		else { result=result + token; }
		}
	return result;
	}

