/*
 *  For dateControl
 */
function isValidTime(h, m) {
  if (h.length != 2) {
    return false;
  }
  var hi = parseInt(h, 10);
  var mi = parseInt(m, 10);
  
  return hi<24 && hi >= 0 && mi<60 && mi >= 0;
}
 
 
function isValidDate(y, m, d) {
  if (y.length != 4) {
    return false;
  }
  if (y == "0000" && m == "00" && d == "00") {
    return true;
  }
  var yi = parseInt(y, 10);
  var mi = parseInt(m, 10) - 1;
  var di = parseInt(d, 10);
  var dd = new Date(yi, mi, di);
  return dd.getMonth() == mi && dd.getDate() == di;
}

function timeChanged(me, field) {
  var found = false;
  aDate = document.forms[me].elements[field].value;
  var strSeparatorArray = new Array("-"," ","/",".",":");
  for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
    if (aDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
      strDateArray = aDate.split(strSeparatorArray[intElementNr]);
      found = true;
      break;
    }
  }
  if (!found) {
    strDateArray = new Array(1);
    strDateArray[0] = aDate;
  }
  if (strDateArray.length == 1) {
    strDateArray[1] = '00';
  }
  strH = strDateArray[0];
  strM = strDateArray[1];
  if (strH.length == 1)
    strH = '0' + strH;
  if (strM.length == 1)
    strM = '0' + strM;  
  if (!isValidTime(strH, strM)) {
    strTime = '00:00';
  } else {
    strTime = strH + ':' + strM;
  }
  document.forms[me].elements[field].value = strTime;  
}

function dateChanged(formelement, formname, field, splityear) {
  var tmp = field + '_tmp';
  var org = reverseDate(document.forms[formname].elements[field].value);
  var formdate = dateFormatJS(document.forms[formname].elements[tmp].value, org, splityear);
  //alert ('org:' + org +' new: '+ formdate);
  if (formelement) {
    formelement.setCurrentValue(reverseDate(formdate));
  }
  document.forms[formname].elements[tmp].value = formdate;
  document.forms[formname].elements[field].value = reverseDate(formdate); 
  dayofweekfield = document.getElementById(field+'dayofweek');
  if (dayofweekfield) {
    dayofweek = getDayOfWeek(formdate);
    dayofweekfield.innerHTML = dayofweek;
  }
}

function getDayOfWeek(aDate) {
  strDateArray = aDate.split("-");
  date = new Date();
  date.setFullYear(strDateArray[2], strDateArray[1]-1, strDateArray[0]);
  return eol_weekdays[date.getDay()];
}

function dateFormatJS(aDate, orgDate, splityear){
  if (aDate == ""){
    return aDate;
  }  
  var found = false;
  var strSeparatorArray = new Array("-"," ","/",".",":");
  for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) {
    if (aDate.indexOf(strSeparatorArray[intElementNr]) != -1) {
      strDateArray = aDate.split(strSeparatorArray[intElementNr]);
      found = true;
      break;
    }
  }
  now = new Date();
  if (!found) {
    if (aDate.length < 3) {
      //assume only day was typed
      strDateArray = new Array(1);
      strDateArray[0] = aDate;
    } else if (aDate.length == 4) {
      //assume day and month was typed
      strDateArray = new Array(2);
      strDateArray[0] = aDate.substr(0,2);
      strDateArray[1] = aDate.substr(2,2);
    } else if (aDate.length == 6 || aDate.length == 8) {
      //assume day, month and year was typed
      strDateArray = new Array(3);
      strDateArray[0] = aDate.substr(0,2);
      strDateArray[1] = aDate.substr(2,2);
      strDateArray[2] = aDate.substr(4);
    } else {
      return orgDate;
    }
  }
  
  if (strDateArray.length == 1) {
    //assume only day was typed
    tmpM = now.getMonth()+1;
    strDateArray[1] = ''+tmpM;
  }
  if (strDateArray.length == 2) {
    tmpY = now.getFullYear();    
    strDateArray[2] = ''+tmpY;
  }
  
  strDay = parseInt(strDateArray[0], 10)+'';
  strMonth = parseInt(strDateArray[1], 10)+'';
  strYear = parseInt(strDateArray[2], 10)+'';
  century = '20';
  if (strYear.length == 2) {
    if (strYear > splityear) {
      century = '19';
    } 
    strYear = century + strYear;
  }
  if (strYear.length == 1) {
    if (strYear > splityear) {
      century = '19';
    } 
    strYear = century + '0' + strYear;
  }

  if (strMonth.length == 1) {
    strMonth = '0' + strMonth;
  }
  if (strDay.length == 1) {
    strDay = '0' + strDay;
  }
  
  if (!isValidDate(strYear, strMonth, strDay)) {
    return orgDate;
  }

  return strDay + "-" + strMonth + "-" + strYear;
}

/** 
* input a date formatted in dd-mm-yyyy or reverse (no exceptions!)
* use with output of dateFormatJS
* return yyyy-mm-dd (or reverse) format of the same date
*/
function reverseDate(aDate) {
  strDateArray = aDate.split("-");
  if (strDateArray[2] == undefined || strDateArray[1] == undefined || strDateArray[0] == undefined) {
    return aDate;
  }
  return strDateArray[2] + '-' +  strDateArray[1] + '-' + strDateArray[0];
}

