var mDelMsg = "Confermare la cancellazione";
var invalidDate = "La data digitata non è valida.";
var invalidTime = "L'ora digitata non è valida.";
var invalidTimestamp = "L'ora e/o la dats digitata non è valida. (DD/MM/YYYY HH:MM:SS)";
var invalidDurata = "La durata digitata non è valida (hhhh:mm).";
var gClassName;

function getCurrentDate()
{
  var d = new Date();
  var s = d.getDate().toString();
  if (s.length < 2)
    s = "0" + s;
  s += "/";
  s += (d.getMonth() + 1).toString();
  if (s.length < 5)
   s = s.substring(0, 3) + "0" + s.substring(3, 4);
  s += "/";
  s += d.getFullYear().toString();

  return s;
}

function getCurrentTime()
{
  var d = new Date();
  
  var hh = d.getHours().toString();
  if (hh.length == 1)
    hh = "0" + hh;
  
  var mm = d.getMinutes().toString();
  if (mm.length == 1)
    mm = "0" + mm;

  return hh + ":" + mm;

}

function daysInFebruary(year)
{
  return (((year % 4 == 0) && ((!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28);
}

function isDate(day, month, year)
{
  if (day > daysInMonth[month]) return false;
  if ((month == 2) && (day > daysInFebruary(year))) return false;

  return true;
}

var ddOfMM = new Array();
ddOfMM[1] = 31;
ddOfMM[2] = 29;
ddOfMM[3] = 31;
ddOfMM[4] = 30;
ddOfMM[5] = 31;
ddOfMM[6] = 30;
ddOfMM[7] = 31;
ddOfMM[8] = 31;
ddOfMM[9] = 30;
ddOfMM[10] = 31;
ddOfMM[11] = 30;
ddOfMM[12] = 31;

function isDigit(c)
{
  return ((c >= "0") && (c <= "9"))
}

// check if date string is in the format dd/mm/aaaa
function isStrDate(inValue){
  var dateSep="/";
  var vToken;
  var dd, mm, aaaa;
  var i, j;

  if (isEmpty(inValue))
    return true;

  vToken = inValue.split(dateSep);
  if (vToken.length != 3
      || vToken[0].length > 2
      || vToken[1].length > 2
      || vToken[2].length > 4)
    return false;
  for(j=0; j<vToken.length; j++)
    for (i=0; i<vToken[j].length; i++){
      if (!isDigit(vToken[j].substr(i,1)))
        return false;
    }
  dd = parseInt(vToken[0],10);
  mm = parseInt(vToken[1],10);
  if (isNaN(mm) || mm < 1 || mm > 12)
    return false
  if (isNaN(dd) || dd < 1 || dd > ddOfMM[mm])
    return false

  aaaa = parseInt(vToken[2],10);
  if (isNaN(aaaa) || aaaa<1000 || aaaa>9999)
    return false

  if ((mm == 2) && (dd > daysInFebruary(aaaa))) return false;

  return true;
}

function isStrDurata(inValue){
  var timeSep=":";
  var vToken;
  var hh, mm;
  var i, j;
  if (isEmpty(inValue))
    return true;
 
  vToken = inValue.split(timeSep);
  if (vToken.length != 2
      || vToken[0].length > 4
      || vToken[1].length > 2)
    return false;
//  alert('hh:' + vToken[0] + '-mm:' + vToken[1] + '-');

  hh = parseInt(vToken[0],10);
  mm = parseInt(vToken[1],10);
//  alert('hh:' + hh + '-mm:' + mm + '-');
  
  if (isNaN(hh) || hh < 0 || hh > 9999)
    return false;
  if (isNaN(mm) || mm < 0 || mm > 59)
    return false;

  return true;
//alert('isStrDurata: ESCO!!!!');

}


function isStrTime(inValue){
  var timeSep=":";
  var vToken;
  var hh, mm;
  var i, j;

  if (isEmpty(inValue))
    return true;

  vToken = inValue.split(timeSep);
  if (vToken.length != 2
      || vToken[0].length > 2
      || vToken[1].length > 2)
    return false;

  for(j=0; j<vToken.length; j++)
    for (i=0; i<vToken[j].length; i++){
      if (!isDigit(vToken[j].substr(i,1)))
        return false;
  }
  hh = parseInt(vToken[0],10);
  mm = parseInt(vToken[1],10);

  if (isNaN(hh) || hh < 0 || hh > 23)
    return false;
  if (isNaN(mm) || mm < 0 || mm > 59)
    return false;

  return true;
}

function checkDate(theField) {
  var mValue = theField.value;
  if (isEmpty(mValue))
    return true;
    
  var mNew = "";
  var nDigits = 0;
  var nSlashes = 0;
  var curDate = getCurrentDate();

  for (i=0; i < mValue.length; i++) {
    var mChar = mValue.charAt(i);

    if (mChar >= '0'
    && mChar <= '9') {
      nDigits++;
      mNew += mChar;
    } else {
      nSlashes++;
      if (nSlashes == 1 && mNew.length == 1) {
        mNew = "0" + mNew;
        nDigits++;
      }
      if (nSlashes == 2 && mNew.length == 4) {
        mNew = mNew.substring(0, 3) + "0" + mNew.substring(3, 4);
        nDigits++;
      }
      mNew += "/";
    }
  }

  if (mNew.charAt(mNew.length-1) == '/') {
    if (nDigits == 0) {
      mNew = curDate;
      nSlashes = 2;
      nDigits = 8;
    } else {
      mNew = mNew.substring(0, mNew.length-1);
      nSlashes--;
    }
  }
  if (nSlashes == 1 && mNew.length == 4) {
    mNew = mNew.substring(0, 3) + "0" + mNew.substring(3, 4);
    nDigits++;
  }
  if (nSlashes > 2) {
    warnInvalid(theField, invalidDate);
    return false;
  }
  if (nSlashes == 0) {
    if (nDigits < 3) {
      mNew += curDate.substring(2, 10);
    } else if (nDigits == 4) {
      mNew = mNew.substring(0, 2) + "/" + mNew.substring(2, 4) + curDate.substring(5, 10);
    } else if (nDigits == 6) {
      mYear = parseInt(mNew.substring(4, 6));
      mNew = mNew.substring(0, 2) + "/" + mNew.substring(2, 4) + "/";
      if (mYear <= 9)
        mNew += "200" + mYear.toString();
      else if (mYear <= 49)
        mNew += "20" + mYear.toString();
      else
        mNew += "19" + mYear.toString();
    } else if (nDigits == 8) {
      mNew = mNew.substring(0, 2) + "/" + mNew.substring(2, 4) + "/" + mNew.substring(4, 8);
    } else {
      warnInvalid(theField, invalidDate);
      return false;
    }
  } else if (nSlashes == 1) {
    mNew += curDate.substring(5, 10);
  } else if (nDigits < 8) {
    var mYear = parseInt(mNew.substring(6, mNew.length));
    mNew = mNew.substring(0, 6);
    if (mYear <= 9) {
      mNew += "200" + mYear.toString();
    } else if (mYear <= 49) {
      mNew += "20" + mYear.toString();
    } else if (mYear < 100) {
      mNew += "19" + mYear.toString();
    } else {
      mNew += "1" + mYear.toString();
    }
    nDigits = 8;
  }
  if (!isStrDate(mNew)) {
    warnInvalid(theField, invalidDate + " (" + mNew + ")");
    return false;
  }
  theField.value = mNew;
  return true;
}

function checkTime(theField) {
  var mValue = theField.value;
  if (isEmpty(mValue))
    return true;

  mValue += ":"; 
  var mNew = "";
  var nDigits = 0;
  var nSlashes = 0;
  var mCharInit = 0;
  var curTime = getCurrentTime();
  for (i=0; i < mValue.length; i++) {
    var mChar = mValue.charAt(i);

    if (mChar >= '0'
    && mChar <= '9') {
      if (nDigits < 4) {
        nDigits++;
        mNew += mChar;
      }
    } else {
      switch (nDigits) {
        case 0:
          mCharInit = 1;
          mNew += curTime.substring(0, 3);
          nDigits = 2;
          break;
        case 1:
          mNew = "0" + mNew + ":";
          nDigits = 2;
          break;
        case 2:
          mNew = mNew.substring(0, 2) + ":";
          nDigits = 2;
          break;
        case 3:
          if (nSlashes == 0) {
            mNew = mNew.substring(0, 2) + ":" + mNew.substring(2, 3);
            nDigits = 3;
          } else {
            mNew = mNew.substring(0, 2) + ":0" + mNew.substring(3, 4);
            nDigits = 4;
          }
          break;
        case 4:
          if (nSlashes == 0)
            mNew = mNew.substring(0, 2) + ":" + mNew.substring(2, 4);
          else
            mNew = mNew.substring(0, 2) + ":" + mNew.substring(3, 5);
          break;
      }          
      nSlashes++;
    }
  }
  if (nDigits < 4) {
    var mTime = '00000';
    if (mCharInit == 0)
      mNew += mTime.substring(nDigits+1, 8-nDigits);
    else
      mNew += curTime.substring(nDigits+1, 8-nDigits);
    nDigits = 4;
  }
  if (!isStrTime(mNew)) {
    warnInvalid(theField, invalidTime + " (" + mNew + ")");
    return false;
  }

  theField.value = mNew;
  return true;
}

function checkDurata(theField) {
  var mValue = theField.value;
  if (isEmpty(mValue))
    return true;

  mValue += ":"; 
  var mNew = "";
  var nDigits = 0;
  var nSlashes = 0;
//alert(' +VAL+:' + mValue + '-');

  for (i=0; i < mValue.length; i++) {
    var mChar = mValue.charAt(i);
//alert(' +CAR+:' + mChar + '-');
    if (mChar >= '0'
    && mChar <= '9') {
//alert(' *IF*:' + mNew + '-');
      if (nDigits < 7) {
        nDigits++;
        mNew += mChar;
      }
    } else {
//alert(' *ELSE*:' + mNew + '-');
      switch (nDigits) {
        case 0:
//          mCharInit = 1;
          mNew = '0' + mNew;
          nDigits += 1;
        case 1:
          mNew = '0' + mNew;
          nDigits += 1;
        case 2:
          mNew = '0' + mNew;
          nDigits += 1;
        case 3:
          mNew = '0' + mNew;
          nDigits += 1;
        case 4:
          mNew = mNew + ':';
          break;
        case 5:
//          alert('NEW5>01234567<\nNEW5>' + mNew + '<');
          if (nSlashes == 0) {
//          alert('N50>' + mNew.substring(0, 4)+ '-' + mNew.substring(5, 5));
            mNew = mNew.substring(0, 4) + ":" + mNew.substring(4, 5);
          } else {
//            alert('N51>' + mNew.substring(0, 4)+ '-' + mNew.substring(5, 5));
            mNew = mNew.substring(0, 4) + ":" + mNew.substring(5, 6);
          }
          break;
        case 6:
//alert('New6>01234567<\nNEW6>' + mNew + '<');
          if (nSlashes == 0) {
//alert('N60>' + mNew.substring(0, 4)+ ':' + mNew.substring(4, 6));
            mNew = mNew.substring(0, 4) + ":" + mNew.substring(4, 6); 
          } else {
//alert('N61>' + mNew.substring(0, 4)+ ':' + mNew.substring(5, 7));
            mNew = mNew.substring(0, 4) + ":" + mNew.substring(5, 7);
          }
//alert('NEW6>01234567<\nNEW6>' + mNew + '<');
          break;
        case 7:
//alert('NEW7>01234567<\nNEW7>' + mNew + '<');
          if (nSlashes == 0)
            mNew = mNew.substring(0, 4) + ":" + mNew.substring(4, 6);
          else
            mNew = mNew.substring(0, 4) + ":" + mNew.substring(5, 7);
          break;
      }          
      nSlashes++;
    }
  }
//alert('DURATA 1>' + mNew + '<>' + nDigits + '<');
  if (nDigits < 6) {
    var mDurata = '0000000';
    mNew += mDurata.substring(nDigits, 6);
    nDigits = 7;
  }
//alert('DURATA 2>' + mNew + '<');
  if (!isStrDurata(mNew)) {
    warnInvalid(theField, invalidDurata + " (" + mNew + ")");
    return false;
  }
//alert('END>01234567<\nEND>' + mNew + '<');
  var index = -1;
  for (i=0; i<3; i++) 
  {
    if (mNew.charAt(i) > '0') {
      index = i;
      break;
    }
  }
  if (index == -1 )
    index = 2;
//  alert('DURATA pre:' + mNew + '-' + index + '-');
  var stringa = mNew.substring(index,7);
//  alert('DURATA finale:' + stringa + '-' + index + '-');
  theField.value = stringa;
  return true;
}




function checkTimestamp(theField) {
  var mValue = theField.value;
  var mValueDate = "";
  var mValueTime = "";
  var vToken;
  var mNew = "";
  if (isEmpty(mValue))
    return true;
  vToken = mValue.split(' ');
  if (vToken.length < 2) {
    warnInvalid(theField, invalidTimestamp + " (" + theField.value + ")");
    return false;
  }  
  mValueDate = vToken[0];
  mValueTime = vToken[1];

  theField.value = mValueDate;
  if (!checkDate(theField)) {
    theField.value = mValue;
  } else {
    mValueDate = theField.value;
    theField.value = mValueTime;
    if (!checkTime(theField)) {
      theField.value = mValue;
    } else {
      mValueTime = theField.value
      theField.value = mValueDate + ' ' + mValueTime  + ':00';
      return true;
    }
  }
  return false;
}

function alerta(pStr) {
  var mBox = document.getElementById("errorList");
  if (mBox != null) {
    if (isEmpty(pStr))
      mBox.innerHTML = "";
    else
      mBox.innerHTML = pStr;
  }
}

function warnInvalid(theField, s)
{
  if (theField != null) {
    theField.className = gClassName;
    if (theField.type != "HIDDEN" && theField.type != "hidden" && !theField.disabled) {
      theField.focus();
      if (theField.type == "text" || theField.type == "TEXT") {
        theField.select();
      //theField.className = "error";
      }
    }
  }
  alerta(s);
  return false;
}

function isEmpty(s)
{
   return ((s == null) || (s.length == 0))
}
// IMPEDISCE DI INSERIRE CARATTERI NON NUMERICI
function numericKeys(theField) {
  var mVal = theField.value;
  if (window.event.keyCode >= 48 && window.event.keyCode <= 57 && !window.event.shiftKey)
    return;
  window.event.keyCode = null;
}
function moneyKeys(theField) {
  var mVal = theField.value;
  if (window.event.keyCode == 46)
    window.event.keyCode = 44;
  if ((window.event.keyCode == 44 || (window.event.keyCode >= 48 && window.event.keyCode <= 57)) && !window.event.shiftKey)
    return;
  window.event.keyCode = null;
}
function upperAlphaKeys(theField) {
  var mVal = theField.value;
  if (window.event.keyCode >= 65 && window.event.keyCode <= 90)
    return;
  if (window.event.keyCode >= 97 && window.event.keyCode <= 122) {
    window.event.keyCode -= 32;
    return;
  }
  window.event.keyCode = null;
}
function getForm() {
  return document.forms[0];
}
function doAction(pAction) {
  var frm = getForm();
  var act = document.getElementById("action");
  act.value = pAction;
  frm.submit();
}

function openWin(pAction, pPath) {
/*
  var mUrl = document.location.toString();
  var pos = mUrl.indexOf("controller");
  mUrl = mUrl.substring(0, pos);
*/  
  mUrl = "controller?action=" + pAction;
  if (!isEmpty(pPath))
    mUrl += "&navpath=" + pPath;    
  window.open(mUrl);
}

function doAction2(pAction, pPath) {
  var frm = getForm();
  var act = document.getElementById("action");
  act.value = pAction;
  act = document.getElementById("navpath");
  act.value = pPath;
  frm.submit();
}
function doAction3(pAction, pPath, pOption1) {
  var frm = getForm();
  var act = document.getElementById("action");
  act.value = pAction;
  act = document.getElementById("navpath");
  act.value = pPath;
  act = document.getElementById("option1");
  act.value = pOption1;
  frm.submit();
}
function doAction4(pAction, pPath, pOption1, pOption2) {
  var frm = getForm();
  var act = document.getElementById("action");
  act.value = pAction;
  act = document.getElementById("navpath");
  act.value = pPath;
  act = document.getElementById("option1");
  act.value = pOption1;
  act = document.getElementById("option2");
  act.value = pOption2;
  frm.submit();
}
function sortColumn(pPath, pColumn) {
  var mShift;

  if (window.event.shiftKey)
    mShift = "0";
  else
    mShift = "1";

  doAction4('SortColumn', pPath, pColumn, mShift);
}
function confirmAction(pAction, pPath, pMessage) {
  var bChoice = window.confirm(pMessage);
  if (bChoice) {
    doAction(pAction, pPath);
  }
}
function confirmDelete(pPath) {
  var bChoice = window.confirm(mDelMsg);
  if (bChoice) {
    doAction2("Delete", pPath);
  }
}
function txtIsValid(pField) {
  pField.className = gClassName;
  return true;
}

function txtGotFocus(theField) {
  theValue = theField.value;

  var theForm = document.forms[0];
  var theFieldPt = document.getElementById("currField");
  gClassName = theField.className;
  theField.className = "current";

  if (theFieldPt != null)
    if (!isEmpty(theField.name))
      theFieldPt.value = theField.name;
    else
      theFieldPt.value = theField.id;

  if (theField.type != "select-one")
    theField.select();
}

function requeryOnChange(pItem, pReload) {
  var mValue = pItem.value;
  if (isEmpty(mValue))
    doAction("Post");
  if (pReload)
    doAction("Post");
}
function txtOnChange(pReload) {
  if (pReload) {
    doAction("Post");
  }
}
function dateOnChange(pField, pReload) {
  if (!dateIsValid(pField))
    return;  
  if (pReload) {
    doAction("Post");
  }
}

function boolOnChange(pReload, pName) {
  var theForm = document.forms[0];
  var theField = document.getElementById(pName);
  
  if (theField.value == "true")
    theField.value = "false";
  else
    theField.value = "true";

  if (pReload) {
    doAction("Post");
  }
}


function dateIsValid(pField) {
  if (!checkDate(pField))
    return false;
  return txtIsValid(pField);    
}
function timeIsValid(pField) {
  if (!checkTime(pField))
    return false;
  return txtIsValid(pField);
}
function durataIsValid(pField) {
  if (!checkDurata(pField))
    return false;
  return txtIsValid(pField);
}
function timestampIsValid(pField) {
  if (!checkTimestamp(pField)) {
    return false;
  }
  return txtIsValid(pField);
}
function numIsValid(pField) {
  if (isEmpty(pField.value)) {
    txtIsValid(pField);
    return;
  }
  if (pField.value.charAt(0) == ',')
    pField.value = "0" + pField.value;
  return txtIsValid(pField);
}


function skipElem(pElem) {
  if (pElem.tabIndex == -1
  || pElem.tagName=="INPUT" && (pElem.readOnly || pElem.type == "hidden" || pElem.type == "reset" || pElem.type == "button" || pElem.disabled)
  || pElem.tagName=="SELECT" && pElem.disabled
  || pElem.tagName=="TEXTAREA" && pElem.disabled)
    return true;

  return false;
}

function skipNext(theField) {
  var theForm = document.forms[0];
  var mInputs = theForm.elements;

  i = 0;
  if (!isEmpty(theField)) {
    while (i < mInputs.length && mInputs[i].name != theField && mInputs[i].id != theField)
      i++;
    if (i < mInputs.length)
	  return mInputs[i];
	else
	  i = 0;
  }
  while (i < mInputs.length && skipElem(mInputs[i]))
    i++;
  if (i < mInputs.length)
    return mInputs[i];
  else
    return null;
}

function skipPrev(theField) {
  var theForm = document.forms[0];
  var mInputs = theForm.elements;

  i = mInputs.length-1;
  if (isEmpty(theField)) {
    while (i >= 0 && skipElem(mInputs[i]))
      i--;
  } else {
    while (i >= 0 && mInputs[i].name != theField && mInputs[i].id != theField)
      i--;
      
    while (i >= 0 && skipElem(mInputs[i]))
      i--;
  }
  if (i >= 0)
    return mInputs[i];
  else
    return null;
}

function nextField(pBackw)
{
  var theForm = document.forms[0];
  if (theForm == null)
    return;
    
  var theFieldPt = document.getElementById("currField");

  var theField;
  var curField;

  if (theFieldPt != null) {
    theField = theFieldPt.value;
    if (!isEmpty(theField))
      curField = document.getElementById(theField);
  }

  var mMsg = document.getElementById("errorList");

  if (curField != null
  && mMsg != null
  && !isEmpty(mMsg.innerHTML)) {
    curField.focus();
    return;
  }

  var mField;

  if (pBackw)
    mField = skipPrev(theField);
  else
    mField = skipNext(theField);

  if (mField != null) {
    mField.focus();
    if (theFieldPt != null)
      if (!isEmpty(mField.name))
        theFieldPt.value = mField.name;
      else
        theFieldPt.value = mField.id;
  } else {
    if (theField != null)
      if (document.getElementById(theField) != null)
        if (!skipElem(document.getElementById(theField))) {
          document.getElementById(theField).focus();
        }
  }
}

function keyProcess(pCommand)
{
  var mCode = window.event.keyCode;
//  alert("Premuto:" + mCode + "|" + pF8Command.indexOf("|ExecuteQuery|") + "|");
  var mSave = mCode == 120 && pCommand.indexOf("|Save|") >=0;
  var mQuery = mCode == 119 && pCommand.indexOf("|ExecuteQuery|") >= 0;
  if ( mSave || mQuery ) {
    srcCtl = window.event.srcElement;
    if (srcCtl != null)
      srcCtl.blur();
    if (mQuery)
      doAction("ExecuteQuery");
    else if (mSave) 
      if (window.event.shiftKey)
          doAction("SaveAndNew");
        else
          doAction("Save");
  }
   else if (mCode == 33) {
    doAction("PrevRecord");
  } else if (mCode == 34) {
    doAction("NextRecord");
  }
  
  //alert("key" + window.event.keyCode);
  alerta("");
}


/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
// 
// 				BEGIN OF POP-UP CALENDAR CODE
//
//
// Title: Tigra Calendar
// URL: http://www.softcomplex.com/products/tigra_calendar/
// Version: 3.2 (European date format)
// Date: 10/14/2002 (mm/dd/yyyy)
// Note: Permission given to use this script in ANY kind of applications if
//    header lines are left unchanged.
// Note: Script consists of two files: calendar?.js and calendar.html

// if two digit year input dates after this year considered 20 century.
var NUM_CENTYEAR = 30;
// is time input control required by default
var BUL_TIMECOMPONENT = false;
// are year scrolling buttons required by default
var BUL_YEARSCROLL = true;

var calendars = [];
var RE_NUM = /^\-?\d+$/;

function calendar1(obj_target) {

  // assigning methods
  this.gen_date = cal_gen_date1;
  this.gen_time = cal_gen_time1;
  this.gen_tsmp = cal_gen_tsmp1;
  this.prs_date = cal_prs_date1;
  this.prs_time = cal_prs_time1;
  this.prs_tsmp = cal_prs_tsmp1;
  this.popup    = cal_popup1;

  // validate input parameters
  if (!obj_target)
    return cal_error("Error calling the calendar: no target control specified");
  if (obj_target.value == null)
    return cal_error("Error calling the calendar: parameter specified is not valid target control");
  this.target = obj_target;
  this.time_comp = BUL_TIMECOMPONENT;
  this.year_scroll = BUL_YEARSCROLL;

  // register in global collections
  this.id = calendars.length;
  calendars[this.id] = this;
}

function cal_popup1 (str_datetime) {
  this.dt_current = this.prs_tsmp(str_datetime ? str_datetime : this.target.value);
  if (!this.dt_current) return;

  var obj_calwindow = window.open(
    'calendar.html?datetime=' + this.dt_current.valueOf()+ '&id=' + this.id,
    'Calendar', 'width=200,height='+(this.time_comp ? 215 : 190)+
    ',status=no,resizable=no,top=200,left=200,dependent=yes,alwaysRaised=yes'
  );
  obj_calwindow.opener = window;
  obj_calwindow.focus();
}

// timestamp generating function
function cal_gen_tsmp1 (dt_datetime) {
  return(this.gen_date(dt_datetime) + ' ' + this.gen_time(dt_datetime));
}

// date generating function
function cal_gen_date1 (dt_datetime) {
  return (
    (dt_datetime.getDate() < 10 ? '0' : '') + dt_datetime.getDate() + "/"
    + (dt_datetime.getMonth() < 9 ? '0' : '') + (dt_datetime.getMonth() + 1) + "/"
    + dt_datetime.getFullYear()
  );
}
// time generating function
function cal_gen_time1 (dt_datetime) {
  return (
    (dt_datetime.getHours() < 10 ? '0' : '') + dt_datetime.getHours() + ":"
    + (dt_datetime.getMinutes() < 10 ? '0' : '') + (dt_datetime.getMinutes()) + ":"
    + (dt_datetime.getSeconds() < 10 ? '0' : '') + (dt_datetime.getSeconds())
  );
}

// timestamp parsing function
function cal_prs_tsmp1 (str_datetime) {
  // if no parameter specified return current timestamp
  if (!str_datetime)
    return (new Date());

  // if positive integer treat as milliseconds from epoch
  if (RE_NUM.exec(str_datetime))
    return new Date(str_datetime);

  // else treat as date in string format
  var arr_datetime = str_datetime.split(' ');
  return this.prs_time(arr_datetime[1], this.prs_date(arr_datetime[0]));
}

// date parsing function
function cal_prs_date1 (str_date) {

  var arr_date = str_date.split('/');

  if (arr_date.length != 3) return cal_error ("Invalid date format: '" + str_date + "'.\nFormat accepted is dd/mm/yyyy.");
  if (!arr_date[0]) return cal_error ("Invalid date format: '" + str_date + "'.\nNo day of month value can be found.");
  if (!RE_NUM.exec(arr_date[0])) return cal_error ("Invalid day of month value: '" + arr_date[0] + "'.\nAllowed values are unsigned integers.");
  if (!arr_date[1]) return cal_error ("Invalid date format: '" + str_date + "'.\nNo month value can be found.");
  if (!RE_NUM.exec(arr_date[1])) return cal_error ("Invalid month value: '" + arr_date[1] + "'.\nAllowed values are unsigned integers.");
  if (!arr_date[2]) return cal_error ("Invalid date format: '" + str_date + "'.\nNo year value can be found.");
  if (!RE_NUM.exec(arr_date[2])) return cal_error ("Invalid year value: '" + arr_date[2] + "'.\nAllowed values are unsigned integers.");

  var dt_date = new Date();
  dt_date.setDate(1);

  if (arr_date[1] < 1 || arr_date[1] > 12) return cal_error ("Invalid month value: '" + arr_date[1] + "'.\nAllowed range is 01-12.");
  dt_date.setMonth(arr_date[1]-1);

  if (arr_date[2] < 100) arr_date[2] = Number(arr_date[2]) + (arr_date[2] < NUM_CENTYEAR ? 2000 : 1900);
  dt_date.setFullYear(arr_date[2]);

  var dt_numdays = new Date(arr_date[2], arr_date[1], 0);
  dt_date.setDate(arr_date[0]);
  if (dt_date.getMonth() != (arr_date[1]-1)) return cal_error ("Invalid day of month value: '" + arr_date[0] + "'.\nAllowed range is 01-"+dt_numdays.getDate()+".");

  return (dt_date)
}

// time parsing function
function cal_prs_time1 (str_time, dt_date) {

  if (!dt_date) return null;
  var arr_time = String(str_time ? str_time : '').split(':');

  if (!arr_time[0]) dt_date.setHours(0);
  else if (RE_NUM.exec(arr_time[0]))
    if (arr_time[0] < 24) dt_date.setHours(arr_time[0]);
    else return cal_error ("Invalid hours value: '" + arr_time[0] + "'.\nAllowed range is 00-23.");
  else return cal_error ("Invalid hours value: '" + arr_time[0] + "'.\nAllowed values are unsigned integers.");

  if (!arr_time[1]) dt_date.setMinutes(0);
  else if (RE_NUM.exec(arr_time[1]))
    if (arr_time[1] < 60) dt_date.setMinutes(arr_time[1]);
    else return cal_error ("Invalid minutes value: '" + arr_time[1] + "'.\nAllowed range is 00-59.");
  else return cal_error ("Invalid minutes value: '" + arr_time[1] + "'.\nAllowed values are unsigned integers.");

  if (!arr_time[2]) dt_date.setSeconds(0);
  else if (RE_NUM.exec(arr_time[2]))
    if (arr_time[2] < 60) dt_date.setSeconds(arr_time[2]);
    else return cal_error ("Invalid seconds value: '" + arr_time[2] + "'.\nAllowed range is 00-59.");
  else return cal_error ("Invalid seconds value: '" + arr_time[2] + "'.\nAllowed values are unsigned integers.");

  dt_date.setMilliseconds(0);
  return dt_date;
}

function cal_error (str_message) {
  alert (str_message);
  return null;
}
//
//
//  END OF POP-UP CALENDAR CODE
//
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
//
// funzioni per albero
//
      function openMenu(pId, pRec) {
        var mElm = document.all("c" + pId);
        var mImg = document.all("i" + pId);
        if (mImg == null)
          return;
        if (mElm.style.display == "none") {
          mElm.style.display = "block";
          mImg.src = "images/treeOpenFolder.gif";
        }
        if (pRec) {
          var mChld = mElm.childNodes;
          for (var i=0; i<mChld.length; i++) {
            openMenu(mChld[i].id.substring(1, mChld[i].id.length), true);
          }
        }
      }
      function closeMenu(pId, pRec) {
        var mElm = document.all("c" + pId);
        var mImg = document.all("i" + pId);
        if (mImg == null)
          return;
        if (mElm.style.display == "block") {
          mElm.style.display = "none";
          mImg.src = "images/treeCloseFolder.gif";
        }
        if (pRec) {
          var mChld = mElm.childNodes;
          for (var i=0; i<mChld.length; i++) {
            closeMenu(mChld[i].id.substring(1, mChld[i].id.length), true);
          }
        }
      }
      function toggleMenu(pId) {
        mElm = document.all("c" + pId);
        if (mElm.style.display == "none") {
          openMenu(pId, event.shiftKey);
        } else {
          closeMenu(pId, event.shiftKey);
        }
      }
      function selectNode(pNode, pField) {
        mElm = document.getElementById(pField);
        mElm.value = pNode;
        frmSubmit("0");
      }
      function clearNode(pField) {
        mElm = document.getElementById(pField);
        mElm.value = "";
        frmSubmit("0");
      }
      function clearTwoNodes(pFieldOne, pFieldTwo) {
        mElm = document.getElementById(pFieldOne);
        mElm.value = "";
        mElm = document.getElementById(pFieldTwo);
        mElm.value = "";
        frmSubmit("0");
      }
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
//
// BEGIN OF IMAGE BUTTON CODE
//

	function ImageLoading(mImage) {
		mResult     = new Image();
		mResult.src = mImage;
		return        mResult;
	}
	
	function ImagesPreloading() {
    //    mButtons = new Array("button_down_", "button_out_", "button_over_", "button_up_");
    //    mSizes   = new Array("60", "89", "120", "150", "180", "210");
    //    for (mButton in mButtons) {
    //        for (mSize in mSizes) {
	//        mImage = ImageLoading("images/buttons/"+mButton+mSize+".gif");
    //        }
    //    }
	}
	
	function graphicButton (pItem, pType, pAction) {
  		//pItem.className='button_'+ pAction +'_'+ pType;
	}
//
// END OF IMAGE BUTTON CODE
//
/////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////
function confirmDeleteGet(pPath) {
  var bChoice = window.confirm(mDelMsg);
  if (bChoice) {
    document.location="controller?action=Delete";
  }
}

