
var Util = new Object();

Util.BigDecimalToString = Util_BigDecimalToString;
Util.BooleanToString = Util_BooleanToString;
Util.cleanNumberString = Util_cleanNumberString;
Util.DateToString = Util_DateToString;
Util.format = Util_format;
Util.formatMsg = Util_formatMsg;
Util.NumberToString = Util_NumberToString;
Util.showMsgBox = Util_showMsgBox;
Util.StringToBigDecimal = Util_StringToBigDecimal;
Util.StringToBoolean = Util_StringToBoolean;
Util.StringToDate = Util_StringToDate;
Util.StringToNumber = Util_StringToNumber;

function Util_formatMsg(aStr, aParams) {
  var s = aStr;
  if (aParams == null || aParams.constructor != Array) return String(s);
  var i;
  for (i=0; i<aParams.length; i++) {
    s = s.replace(new RegExp("%" + String(i), 'g'), aParams[i]);
  }
  return String(s);
}

function Util_showMsgBox(aStr, aParams) {
  alert(this.formatMsg(aStr, aParams));
}

function Util_cleanNumberString(aStr) {
  var s = '';
  var i;
  for (i=0; i<aStr.length; i++) {
    if (aStr.charAt(i) != ',')
      s = s + aStr.charAt(i);
  }
  return String(s);
}


function Util_format(anObj, aFormat) {
  if (anObj == null) return '';
  if (isArray(anObj)) {
    var i;
    for (i=0; i<anObj.length; i++) {
      anObj[i] = Util.format(anObj[i], aFormat);
    }
    return anObj;
  }
  var c = anObj.constructor;
  if (c == String)
    return String(anObj);
  else if (c == Number) {
    var sFormat = (aFormat==null || aFormat.length==0?'#,##0.00':aFormat);
    return this.NumberToString(anObj, sFormat);
  } else if (c == Boolean) {
    return this.BooleanToString(anObj, aFormat);
  } else if (c == Date) {
    var sFormat = (aFormat==null || aFormat.length==0?'dd-MMM-yyyy HH:mm:ss.aaa':aFormat);
    return this.DateToString(anObj, sFormat);
  } else if (c == BigDecimal) {
    var sFormat = (aFormat==null || aFormat.length==0?'#,##0.00':aFormat);
    return this.BigDecimalToString(anObj, aFormat);
  }
  return String(anObj);
}

function Util_NumberToString(aValue, aFormat) {
  if (aValue == null || aValue.constructor != Number) return 'NaN'
  return new DecimalFormat(aFormat).format(aValue);
}

function Util_BooleanToString(aValue, aFormat) {
  if (aFormat == null || aFormat == '') aFormat = 'true,false';
  var arr = aFormat.split(',');
  if (aValue == null || aValue.constructor != Boolean) return arr[1];
  if (!aValue) return arr[1];
  return arr[0];
}

function Util_DateToString(aValue, aFormat) {
  if (aValue == null || aValue.constructor != Date) return '';
  return new SimpleDateFormat(aFormat).format(aValue);
}

function Util_StringToDate(aValue, aFormat) {
  if (aValue == null || aValue.constructor != String) return null;
  if (aValue.length == 0) return null;
  var obj = new SimpleDateFormat(aFormat).parse(aValue);
  if (obj != null && obj.constructor == Date) return obj;
  return null;
}

function Util_StringToBoolean(aValue, aFormat) {
  if (aFormat == null || aFormat == '') aFormat = 'true,false';
  if (aValue.length == 0) return false;
  var a = aFormat.split(',');
  var n = -1;
  var i;
  for (i=0; i<a.length; i++) {
    if (a[i] == aValue) return (i % 2 == 0);
  }
  return false;
}

function Util_StringToNumber(aValue, aFormat) {
  return Number(Util.cleanNumberString(aValue));
}

function Util_StringToBigDecimal(aValue, aFormat) {
  var b = new BigDecimal(Util.cleanNumberString(aValue));
  return b;
}

function Util_BigDecimalToString(aValue, aFormat) {
  var f = new BigDecimalFormat(aFormat);
  return f.format(aValue);
}


function isArray(anObj) {
  return (anObj != null && anObj.constructor == Array);
}

function getControlValue(aCtrl, aDefault) {
  var value, temp_val;
  var i, j;

  value = null;
  if (!aCtrl) return null;
  if (aCtrl[0] && !aCtrl.type) {
    value = new Array();
    j = 0;
    for (i=0; i<aCtrl.length; i++) {
      temp_val = getControlValue(aCtrl[i], aDefault);
      if (temp_val) value[j++] = new String(temp_val);
    }
  } else {
    if (aCtrl.type == "text" || aCtrl.type == "hidden"
        || aCtrl.type == "password" || aCtrl.type == "textarea" || aCtrl.type == "file")
      value = new String(aDefault?aCtrl.defaultValue:aCtrl.value);
    else if (aCtrl.type == "checkbox" || aCtrl.type == "radio") {
      if (aDefault?aCtrl.defaultChecked:aCtrl.checked) value = new String(aCtrl.value);
      else value = "";
    } else if (aCtrl.type.indexOf("select")==0) {
      value = new Array();
      j = 0;
      for (i=0; i<aCtrl.options.length; i++) {
        if (aDefault?aCtrl.options[i].defaultSelected:aCtrl.options[i].selected)
          value[j++] = new String(aCtrl.options[i].value);
      }
    }
  }
  if (value[0] && value.length == 1) value = value[0];
  return value;
}

function setEditControlValue(aCtrl, aValue, aDefault) {
  var i;
  if (aCtrl[0] && isArray(aValue)) {
    var n = (aCtrl.length>aValue.length?aValue.length:aCtrl.length);
    for (i=0; i<n; i++) {
      if (aDefault) aCtrl[i].defaultValue = aValue[i];
      else aCtrl[i].value = aValue[i];
      aCtrl[i].origValue=aValue[i];
    }
    for (i=n; i<aCtrl.length; i++) {
      if (aDefault) aCtrl[i].defaultValue = "";
      else aCtrl[i].value = "";
      aCtrl[i].origValue="";
    }
  } else if (aCtrl[0]) {
    if (aDefault) {
      aCtrl[0].defaultValue = aValue;
      for (i=1; i<aCtrl.length; i++) {
        aCtrl[i].defaultValue = "";
        aCtrl[i].origValue="";
      }
    } else {
      aCtrl[0].value = aValue;
      for (i=1; i<aCtrl.length; i++) {
        aCtrl[i].value = "";
        aCtrl[i].origValue="";
      }
    }
  } else if (isArray(aValue)) {
    if (aDefault) aCtrl.defaulValue = aValue[0];
    else aCtrl.value = aValue[0];
    aCtrl.origValue=aValue[0];
  } else {
    if (aDefault) aCtrl.defaultValue = aValue;
    else aCtrl.value = aValue;
    aCtrl.origValue=aValue;
  }
}

function setCheckControlValue(aCtrl, aValue, aDefault) {
  var i,j;
  if (aCtrl[0] && isArray(aValue)) {
    for (i=0; i<aCtrl.length; i++) {
      if (aDefault) aCtrl[i].defaultChecked = false;
      else aCtrl[i].checked = false;
    }
    for (j=aValue.length-1; j>=0; j--) {
      for (i=0; i<aCtrl.length; i++) {
        if (aCtrl[i].value == aValue[j]) {
          if (aDefault) aCtrl[i].defaultChecked = true;
          else aCtrl[i].checked = true;
        } else {
          if (aDefault && aCtrl[i].type == "radio") aCtrl[i].defaultChecked = false;
        }
      }
    }
  } else if (aCtrl[0]) {
    for (i=0; i<aCtrl.length; i++) {
      if (aDefault) aCtrl[i].defaultChecked = (aCtrl[i].value == aValue);
      else aCtrl[i].checked = (aCtrl[i].value == aValue);
    }
  } else if (isArray(aValue)) {
    if (aDefault) aCtrl.defaultChecked = false;
    else aCtrl.checked = false;
    for (i=0; i<aValue.length; i++) {
      if (aCtrl.value == aValue[i]) {
        if (aDefault) aCtrl.defaultChecked = true;
        else aCtrl.checked = true;
      }
    }
  } else {
    if (aDefault) aCtrl.defaultChecked = (aCtrl.value == aValue);
    else aCtrl.checked = (aCtrl.value == aValue);
  }
}

function setSelectControlValue(aCtrl, aValue, aDefault) {
  var i, j;
  if (aCtrl.type && isArray(aValue)) {
    for (i=0; i<aCtrl.length; i++) {
      if (aDefault) aCtrl.options[i].defaultSelected = false;
      else aCtrl.options[i].selected = false;
    }
    for (j=aValue.length-1; j>=0; j--) {
      for (i=0; i<aCtrl.length; i++) {
        if (aCtrl.options[i].value == aValue[j]) {
          if (aDefault) aCtrl.options[i].defaultSelected = true;
          else aCtrl.options[i].selected = true;
        } else {
          if (aDefault) aCtrl.options[i].defaultSelected = false;
        }
      }
    }
  } else if (aCtrl.type) {
    for (i=0; i<aCtrl.length; i++) {
      if (aDefault) aCtrl.options[i].defaultSelected = false;
      else aCtrl.options[i].selected = false;
    }
    for (i=0; i<aCtrl.length; i++) {
      if (aCtrl.options[i].value == aValue) {
        if (aDefault) aCtrl.options[i].defaultSelected = true;
        else aCtrl.options[i].selected = true;
      }
    }
  } else {
    for (i=0; i<aCtrl.length; i++) {
      if (isArray(aValue))
        setSelectControlValue(aCtrl[i], aValue[i], aDefault);
      else
        setSelectControlValue(aCtrl[i], aValue, aDefault);
    }
  }
}

function setControlValue(aCtrl, aValue, aDefault) {
  if (!aCtrl) return;

  var ctrl_type = getControlType(aCtrl);

  if (ctrl_type == "text" || ctrl_type == "password" || ctrl_type == "hidden"
        || ctrl_type == "textarea" || ctrl_type == "file") {
    setEditControlValue(aCtrl, aValue, aDefault);
  } else if (ctrl_type == "checkbox" || ctrl_type == "radio") {
    setCheckControlValue(aCtrl, aValue, aDefault);
  } else if (ctrl_type.indexOf("select") == 0) {
    setSelectControlValue(aCtrl, aValue, aDefault);
  }
}

function getControlType(aCtrl) {
  if (aCtrl[0] && !aCtrl.type) return getControlType(aCtrl[0]);
  return aCtrl.type;
}

function isControlArray(aCtrl) {
  if (aCtrl[0] && !aCtrl.type) return true;
  return false;
}

  function doCheckAll(aCtrl, aChecked) {
    if (aCtrl) {
      if (isControlArray(aCtrl)) {
        for (i=0; i< aCtrl.length; i++) {
          if (!aCtrl[i].disabled) {
            aCtrl[i].checked = aChecked;
          }
        }
      } else {
        if (!aCtrl.disabled) {
          aCtrl.checked = aChecked;
        }
      }
    }
  }

function clearControlValue(aCtrl) {
  if (isControlArray(aCtrl)) {
    var i;
    for (i=0; i<aCtrl.length; i++) {
      clearControlValue(aCtrl[i]);
    }
  } else {
    var ctrl_type = aCtrl.type;
    if (ctrl_type == "text" || ctrl_type == "password" || ctrl_type == "hidden"
        || ctrl_type == "textarea" || ctrl_type == "file") {
      aCtrl.value = '';
    } else if (ctrl_type == 'checkbox' || ctrl_type == 'radio') {
      aCtrl.checked = false;
    } else if (ctrl_type.indexOf("select") == 0) {
      if (ctrl_type == 'select-multiple') {
        //for (var i=0; i<aCtrl.options.length; i++) {
        //  aCtrl.options[i].selected = false;
        //}
        aCtrl.selectedIndex = -1;
      } else {
        aCtrl.selectedIndex = 0;
      }
    }
  }
}


function setSingleCheckControlValue(aCtrlArray, aCtrl, aValue) {
     var i;

      for (i=0; i<aCtrlArray.length; i++) {
        if (aCtrlArray[i]!=aCtrl)
        aCtrlArray[i].checked=false;
      }

}

function doToggleAll(aCtrl, anAllCtrl){
  if (!aCtrl.checked) anAllCtrl.checked=false;
}
