var isMozilla = navigator.userAgent.indexOf('Mozilla') != -1 && parseInt(navigator.appVersion.substring(0,1)) >= 5;
var isIE = navigator.userAgent.indexOf('MSIE') != -1;

//object function
function isNull(obj) {
  return ((typeof(obj) == "undefined")||(obj == null)||(obj.length==0));
}

Number.prototype.rate = function(){  
  var str = this.toString(); 
  if (str.indexOf(".")==-1)  
    return 1; 
  else 
    return Math.pow(10,parseInt(str.length - str.indexOf(".") - 1)); 
}

String.prototype.lengthB = function() {
  var cArr = this.match(/[^\x00-\xff]/ig);
  return this.length + (cArr == null ? 0 : cArr.length);
}

function tran(){ 
  args=tran.arguments; 
  var sum=1;
  
  for(var i=0;i<args.length;i++) 
    sum *= args[ i ]*args[ i ].rate(); 
    
  for(var i=0;i<args.length;i++)  
    sum /= args[ i ].rate();
 
  return sum; 
}

function isNumber(sText) {
  var op = /^\d+$/;
  if (!op.test(sText)) {
      return false;
  }
  return true;
}

function isInteger(sText) {
  var op = /^[-\+]?\d+$/;
  if (!op.test(sText)) {
      return false;
  }
  return true;
}

function isFloat(sText) {
  var op = /^[-\+]?\d+(\.\d+)?$/;
  if (!op.test(sText)) {
      return false;
  }
  return true;
}

function isDate(sDate) {
  var sYear=2000;
  var sMonth=1;
  var sDay=1;
  var sFormat;
  if (isDate.arguments.length==2)
    sFormat = isDate.arguments[1];
  else
    sFormat = LOCAL_DATE_FORMAT;
  
  var sSplit = getSplitChar(sFormat,"yMd");
  if (sSplit==null)
    return false;
  
  sDateArray = sDate.split(sSplit); 
  sFormatArray = sFormat.split(sSplit);
      
  if ((sDateArray==null)||(sDateArray.length==0)||(sDateArray.length!=sFormatArray.length))
    return false;
      
  for (var i=0; i<sFormatArray.length;i++) {
    if(sFormatArray[i]=="yyyy") {
    	sYear = sDateArray[i];
    } else if(sFormatArray[i]=="MM") {
     	sMonth = sDateArray[i];
    } else if(sFormatArray[i]=="dd") {
     	sDay = sDateArray[i];
    }
  }
  
  var dDate = new Date(sYear, sMonth-1, sDay);
  
  return typeof(dDate) == "object" && sYear == dDate.getFullYear() && sMonth == dDate.getMonth()+1 && sDay == dDate.getDate();
}

function isTime(sTime) {
  var sHour,sMinute,sSecond;
  var sFormat;
  if (isTime.arguments.length==2)
    sFormat = isTime.arguments[1];
  else
    sFormat = LOCAL_TIME_FORMAT;
    
  var sSplit = getSplitChar(sFormat,"Hms");
  if (sSplit==null)
    return false;
  sTimeArray = sTime.split(sSplit); 
  sFormatArray = sFormat.split(sSplit);
      
  if ((sTimeArray==null)||(sTimeArray.length==0)||(sTimeArray.length!=sFormatArray.length))
    return false;
      
  for (var i=0; i<sFormatArray.length;i++) {
    if(sFormatArray[i]=="HH") {
      sHour = sTimeArray[i];
      if (!isNumber(sHour))
        return false;
      if (parseInt(sHour, 10)<0)
        return false;
      if (parseInt(sHour, 10)>23) 
        return false;
    } else if(sFormatArray[i]=="mm") {
      sMinute = sTimeArray[i];
      if (!isNumber(sMinute))
        return false;
      if (parseInt(sMinute, 10)<0)
        return false;
      if (parseInt(sMinute, 10)>=60) 
        return false;
    } else if(sFormatArray[i]=="ss") {
      sSecond = sTimeArray[i];
      if (!isNumber(sSecond))
        return false;
      if (parseInt(sSecond, 10)<0)
        return false;
      if (parseInt(sSecond, 10)>=60) 
        return false;
    }
  }
  return true;
}

function getSplitChar(sFormat,sChar) {
  for (var i = 0; i < sFormat.length; i++) {
    if (sChar.indexOf(sFormat.charAt(i))<0)
      return sFormat.charAt(i);
  }
  return null;
} 
//cookie function
function addCookie(name,value,expireHours){
      var cookieString=name+"="+escape(value);
      var date = new Date();
      date.setTime(date.getTime() + expireHours*3600*1000);
      //cookieString=cookieString+";path=.;expires="+date.toGMTString();
      cookieString=cookieString;
      document.cookie=cookieString;
}

function getCookie(name){
  var strCookie = document.cookie;
  var arrCookie=strCookie.split("; ");
  for(var i=0;i<arrCookie.length;i++){
    var arr=arrCookie[i].split("=");
    if(arr[0]==name)
      return unescape(arr[1]);
  }
  return "";
}

function deleteCookie(name){
  var date=new Date();
  date.setTime(date.getTime()-10000);
  document.cookie=name+"=;  expires="+date.toGMTString();
}

//prompt funtion
function promptMsg(sMsg)
{
  for (var i=1;i<promptMsg.arguments.length;i++) {
    sMsg = sMsg.replace("{"+ (i-1) +"}",promptMsg.arguments[i]);
  }
  alert(sMsg);
}

function confirmMsg(sMsg)
{
  for (var i=1;i<confirmMsg.arguments.length;i++) {
    sMsg = sMsg.replace("{"+ (i-1) +"}"+i,confirmMsg.arguments[i]);
  }
  return confirm(sMsg);
}

function showPrompt(promptText) {
  if (promptText==null)
    promptText = PAGE_EXECUTE_PROCESS;
  
  processDiv.innerHTML = "&nbsp;" + promptText + "&nbsp;";
  processDiv.style.left = document.body.scrollLeft + 4;
  processDiv.style.top = document.body.scrollTop + 4;
  processDiv.style.display = "block";
  showMask();
  
  return true;
}

function hidePrompt() {
  processDiv.style.display = "none";
  hideMask();
}

//form function
function getFormByName(formName) {
  for (var i=0;i<document.forms.length;i++) {
    if (document.forms[i].name == formName) {
      return document.forms[i];
    }
  }
  //return document.all(formName);
  return null;
}

function getFieldByName(formObj, FieldName) {
  for (var i=0;i<formObj.elements.length;i++) {
    if (formObj.elements[i].name==FieldName)
      return formObj.elements[i];
  }
  return null;
}

function disableField(fieldObj) {
  fieldObj.disabled = true;
  fieldObj.className = "disabled";
  if (fieldObj.lovUrl!=null) {
    
    var lovImg = document.getElementById(fieldObj.id + "_Lov");
    if (lovImg!=null&&lovImg.className != "disabled") {
      lovImg.className = "disabled";
      var parentObj = lovImg.parentNode;
      if (parentObj.tagName=="A") {
        //lovImg.href = parentObj.href;
        parentObj.oldHref = parentObj.href;
        parentObj.href = "#";
      }
    }
  }
}

function enableField(fieldObj) {
  fieldObj.disabled = false;
  fieldObj.className = "normal";
  if (fieldObj.lovUrl!=null) {
    
    var lovImg = document.getElementById(fieldObj.id + "_Lov");
    if (lovImg!=null&&lovImg.className != "normal") {
      lovImg.className = "normal";
      var parentObj = lovImg.parentNode;
      if (parentObj.tagName=="A") {
        parentObj.href = parentObj.oldHref;
        parentObj.oldHref = "";
      }
    }
  }
}

function submitForm(formName,sUrl) {
  var formObj = getFormByName(formName);
  
  if (formObj !=null) {
    if (validateForm(formObj)) {
      if (!isNull(sUrl))
        formObj.action = sUrl;
      
      var validateReturn = true;
      if (!isNull(formObj.validateFunction))
      	eval("validateReturn = " + formObj.validateFunction)
      if (validateReturn) {
      	formObj.submit();
      }
    }   
  }
}

function validateForm(formObj) {
  for (var i=0;i<formObj.elements.length;i++) {
  	var fieldObj = formObj.elements[i];
	
	if (fieldObj.disabled==true)
      continue;
    
    if (!isNull(fieldObj.inputType)) {
    	
    } 
    
    if ((!isNull(fieldObj.required))&&fieldObj.required=="true") {
      if (isNull(fieldObj.value)) {
      	promptMsg(FIELD_NOT_NULL,fieldObj.title);
      	fieldObj.focus();
        return false;
      }
    }
    
    if (!validateField(fieldObj))
      return false;
  }
  return true;
}

function validateField(fieldObj) {
  if (!isNull(fieldObj.inputType)) {
    if (fieldObj.inputType=="S") {
      return validateStringField(fieldObj);
    }
    else if (fieldObj.inputType=="N") {
      return validateNumberField(fieldObj);
    }
    else if (fieldObj.inputType=="F") {
      return validateFloatField(fieldObj);
    }
    else if (fieldObj.inputType=="D") {
      return validateDateField(fieldObj);
    }
    else if (fieldObj.inputType=="T") {
      return validateTimeField(fieldObj);
    }
    else if (fieldObj.inputType=="DT") {
      return validateDateTimeField(fieldObj);
    }
  }
  return true;
}

function validateStringField(fieldObj) {
  if (fieldObj.value.lengthB()>fieldObj.maxlength) {
    promptMsg(FIELD_MAX_LENGTH,fieldObj.title,fieldObj.maxlength);
    return false;
  }
  
  if (!isNull(fieldObj.inputFormat)) {
    if (fieldObj.inputFormat.indexOf("A")>=0) {
      var op = /^([a-zA-Z0-9_-])+/;
      if (!op.test(fieldObj.value)) {
        promptMsg(FIELD_NOT_ABC,fieldObj.title);
        return false;
      }
    }
    if (fieldObj.inputFormat.indexOf("U")>=0)
      fieldObj.value = fieldObj.value.toUpperCase();
  }
  return true;
}

function validateNumberField(fieldObj) {
  if (!isNull(fieldObj.value)) {
    if (!isNumber(fieldObj.value)){
      promptMsg(FIELD_NOT_NUMBER,fieldObj.title);
      return false;
    }
  }
  return true;
}

function formatFloat(num,sformat) {
  var digits = 0;
  var numText = "";
  
  if (sformat.indexOf(".")>-1) {
    digits = sformat.substring(sformat.indexOf(".")+1).length;
  }
        
  num = Math.round(num * Math.pow(10,digits))/Math.pow(10,digits);
  numText = ""+num;
        
  if (sformat.charAt(sformat.length-1)=="0"&&digits>0) {
    if (numText.indexOf(".")>-1) {
      decimal = numText.substring(numText.indexOf(".")+1).length;
    }
  else {
    numText = numText + ".";
    decimal = 0;
  }
  while (decimal<digits) {
	numText = numText + "0";
	decimal++;
	}
  }
  return numText;
}

function validateFloatField(fieldObj) {
  if (isNull(fieldObj.value))
    if (!isNull(fieldObj.required)&&fieldObj.required=="true")
      fieldObj.value = "0";
    else
      fieldObj.value = "";
  else {
    if (fieldObj.value.charAt(0)==".")
      fieldObj.value = "0" + fieldObj.value;
    if (isFloat(fieldObj.value)) {
      var num = parseFloat(fieldObj.value);
      var numText = ""+num;
      if (!isNull(fieldObj.inputFormat)) {
        numText = formatFloat(num,fieldObj.inputFormat);
      }
      num = parseFloat(numText);
    
      if (!isNull(fieldObj.interval)) {
      	if (!isNull(fieldObj.min))
      	  if (num<=fieldObj.min) {
      	    promptMsg(FIELD_EQUAL_OR_LESSER,fieldObj.title,fieldObj.min);
      	    return false;
      	  }
      	if (!isNull(fieldObj.max))
      	  if (num>=fieldObj.max) {
      	    promptMsg(FIELD_EQUAL_OR_GREATER,fieldObj.title,fieldObj.max);
      	    return false;
      	  }
      }
      else {
        if (!isNull(fieldObj.min))
      	  if (num<fieldObj.min) {
      	    promptMsg(FIELD_LESSER,fieldObj.title,fieldObj.min);
      	    return false;
      	  }
      	if (!isNull(fieldObj.max))
      	  if (num>fieldObj.max) {
      	    promptMsg(FIELD_GREATER,fieldObj.title,fieldObj.max);
      	    return false;
      	  }
      }
      
      fieldObj.value = numText;
    }
    else {
      promptMsg(FIELD_NOT_FLOAT,fieldObj.title);
      return false;
    }
  }
  return true;
}

function validateDateField(fieldObj) {
  var sYear,sMonth,sDay;
  var sFormat = LOCAL_DATE_FORMAT;
  if (!isNull(fieldObj.inputFormat))
    sFormat = fieldObj.inputFormat
  
  var sText = fieldObj.value;
	if (!isNull(sText)) {
	  var op = /^\d+$/;
	  if(op.test(sText)) {
        if (sText.length!=8) {
          promptMsg(FIELD_NOT_DATE,fieldObj.title,sFormat);
          return false;
		}
        else {
          sYear = sText.substring(0,4);
          sMonth = sText.substring(4,6);
          sDay = sText.substring(6,8);
          
          sText = sFormat;
          sText = sText.replace("yyyy",sYear);
          sText = sText.replace("MM",sMonth);
          sText = sText.replace("dd",sDay);
        }
      }
      
      if (!isDate(sText,sFormat)) {
        promptMsg(FIELD_NOT_DATE,fieldObj.title,sFormat);
        return false;
      }
      sText = sText.replace(" ","");
      fieldObj.value = sText;
	}	
	return true;
}

function validateTimeField(fieldObj) {
  var sHour,sMinute,Second;
  var sFormat = LOCAL_TIME_FORMAT;
  if (!isNull(fieldObj.inputFormat))
    sFormat = fieldObj.inputFormat;
  
  var sText = fieldObj.value;
  if (!isNull(sText)) {
    if (!isTime(sText,sFormat)) {
      promptMsg(FIELD_NOT_TIME,fieldObj.title,sFormat);
      return false;
    }
    fieldObj.value = sText;
  }
  return true;
}

function validateDateTimeField(fieldObj) {
  var sHour,sMinute,Second;
  var sFormat = LOCAL_DATE_FORMAT + " " + LOCAL_TIME_FORMAT;
  if (!isNull(fieldObj.inputFormat))
    sFormat = fieldObj.inputFormat;
  
  sDateFormat = sFormat.substring(0,sFormat.indexOf(" "));
  sTimeFormat = sFormat.substring(sFormat.indexOf(" ")+1,sFormat.length);
  
  var sText = fieldObj.value;
  if (!isNull(sText)) {
    var sDateText,sTimeText;
    if(sText.indexOf(" ")==-1) {
      sDateText = sText;
      sTimeText = sTimeFormat.replace("HH","00");
      sTimeText = sTimeText.replace("mm","00");
      sTimeText = sTimeText.replace("ss","00");
    } 
    else {
      sDateText = sText.substring(0,sText.indexOf(" "));
      sTimeText = sText.substring(sText.indexOf(" ")+1,sText.length);
    }
  
    if (!isNull(sDateText)) {
      if (!isDate(sDateText,sDateFormat)) {
        promptMsg(FIELD_NOT_DATE_TIME,fieldObj.title,sFormat);
        return false;
      }
    }
  
    if (!isNull(sTimeText)) {
      if (!isTime(sTimeText,sTimeFormat)) {
        promptMsg(FIELD_NOT_DATE_TIME,fieldObj.title,sFormat);
        return false;
      }
    }
    
    fieldObj.value = sDateText + " " + sTimeText;
  }
  
  return true;
}

function blurField(fieldObj) {

  if (fieldObj.readonly!=true&&fieldObj.disabled!=true&&!isNull(fieldObj.oldClassName)) {
  	fieldObj.className = fieldObj.oldClassName;
  	
  	if (fieldObj.tagName=="SELECT") {
  	  var options = fieldObj.options;
  	  for(var i=0;i<options.length;i++) {
  	    if (fieldObj.multiple||fieldObj.options[i].selected)
  	      options[i].style.backgroundColor = "#FFFFFF";
  	  }
  	}
  	
  	if (fieldObj.className=="normalTd")
  	  fieldObj.parentNode.style.backgroundColor = "#FFFFFF";
  }
  
  if (!isNull(fieldObj.inputType)) {
    var inputType = fieldObj.inputType;
    if (inputType=="S") {
      return validateStringField(fieldObj);
    }
    else if (inputType=="N") {
      return validateNumberField(fieldObj);
    }
    else if (inputType=="F") {
      return validateFloatField(fieldObj);
    }
    else if (inputType=="D") {
      return validateDateField(fieldObj);
    }
    else if (inputType=="T") {
      return validateTimeField(fieldObj);
    }
    else if (inputType=="DT") {
      return validateDateTimeField(fieldObj);
    }
  }
  
}

function focusField(fieldObj) {
  if (fieldObj.readonly==true||fieldObj.disabled==true)
    return;
  fieldObj.oldClassName = fieldObj.className;

  if (fieldObj.className=="normal") {
  	fieldObj.className = "focus";
  	
  	if (fieldObj.tagName=="SELECT") {
  	  var options = fieldObj.options;
  	  for(var i=0;i<options.length;i++)
  	    options[i].style.backgroundColor = "#F5F0D5";
  	}
  	
  }
  else if(fieldObj.className=="normalTd") {
    fieldObj.className = "focusTd";
    fieldObj.parentNode.style.backgroundColor = "#F5F0D5";
  }
  
}

function selectAllOption(objName) {
	var fieldObj = document.getElementById(objName);
	
	var options = fieldObj.options;
  	  for(var i=0;i<options.length;i++)
  	    options[i].selected = true;
}

//url function
function generateUrl(sUrl,params) {
  for (var i=0;i<params.length;i++) {
    if (sUrl.indexOf("?")<0)
      sUrl = sUrl + "?";
  	else
      sUrl = sUrl + "&";
    sUrl = sUrl + params[i];
  }
  return sUrl;
}

function executeUrl(sUrl,params) {
  sUrl = generateUrl(sUrl,params);
  window.location = sUrl;
}

function executeUrlXml(sUrl,params) {
  sUrl = generateUrl(sUrl,params);
  if (syncExcute(sUrl)) {
    refreshPage();
  }
}

//Ajax function
function createHttpRequest() {
  var httpRequest = null;
  if (window.XMLHttpRequest) { // Mozilla, Safari,...
    httpRequest = new XMLHttpRequest();
    if (httpRequest.overrideMimeType) {
        httpRequest.overrideMimeType('text/xml');
    }
  }
  else if (window.ActiveXObject) { // IE
    try {
      httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e) {
      try {
        httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch (e) {}
    }
  }
  return httpRequest;
}

function createDomObject() {
  return new ActiveXObject("Microsoft.XMLDOM");
}

function syncExcute(url,openMethod,data) {
  var httpRequest = createHttpRequest();
  var domObj = createDomObject();
  if (openMethod=="POST") {
    httpRequest.open("POST",url,false);
    httpRequest.setRequestHeader("Cache-Control","no-cache");
    httpRequest.setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded");
    httpRequest.send(data);
  }
  else {
    httpRequest.open("GET",url,false);
    httpRequest.setRequestHeader("Cache-Control","no-cache");
    httpRequest.send(null);
  }
  
  domObj.async=false;
  domObj.loadXML(httpRequest.responseText);
  if(domObj.parseError.errorCode != 0) {
    delete(httpRequest);
    delete(domObj);
    promptMsg(AJAX_EXECUTE_ERROR); 
  }
  else {
    var childNodes = domObj.documentElement.childNodes;
    for (var i=0;i<childNodes.length;i++) {
      alert(childNodes.item(i).text);
      //if (childNodes[i].baseName = "promptInfo")
      if (childNodes[i].baseName == "exceptionInfo") {
        delete(httpRequest);
        delete(domObj);
        return false;
      }
    }
    delete(httpRequest);
    delete(domObj);
    return true;
  }
  return false;
}

function getPopValue(url) {
  var httpRequest = createHttpRequest();
  var domObj = createDomObject();
  
  httpRequest.open("GET",url,false);
  httpRequest.setRequestHeader("Cache-Control","no-cache");
  httpRequest.setRequestHeader("Pragma","no-cache");
  httpRequest.send(null);
  domObj.async=false;
  domObj.loadXML(httpRequest.responseText);
  if(domObj.parseError.errorCode != 0) {
    delete(httpRequest);
    delete(domObj);
    //alert(AJAX_EXECUTE_ERROR); 
  }
  else {
    var childNodes = domObj.documentElement.childNodes;
    for (var i=0;i<childNodes.length;i++) {
      if (childNodes[i].baseName=='popValue') {
        var popValueObj = childNodes[i];
        var popValue = new Object();
        for (var i=0;i<popValueObj.childNodes.length;i++) {
          var name = popValueObj.childNodes[i].nodeName;
          var value = popValueObj.childNodes.item(i).text;
          eval("popValue." + name + " = value;");
        }
        delete(httpRequest);
        delete(domObj);
        return popValue;
      }
    }
    delete(httpRequest);
    delete(domObj);
  }
  return null;
}

//display table function
function enterPageNum(obj) {
  if(event.keyCode==13) {
  	if (obj.value.length>0&&isInteger(obj.value)) {
  	
  	  if (document.getElementById("jovenReload")==null)
      	window.location = obj.url + obj.value;
      else {
        document.getElementById("jovenReload").href = obj.url + obj.value;
        document.getElementById("jovenReload").click();
      }
    }
  }
}

function selectAllCheck(obj) {
  for (var i=0;i<document.forms.length;i++) {
    for (var j=0;j<document.forms[i].elements.length;j++) {
      var objElement = document.forms[i].elements[j];
      if (objElement.name.indexOf(obj.name)>-1){
        if (objElement!=obj) {
          objElement.checked = obj.checked;
          clickListCheckBox(objElement);
        }
      }
    }
  }
}

function clickListCheckBox(obj) {

  var bgColor = "#FFFFFF";
  if (obj.checked==true)
    bgColor = "E8F2FE";
    
  var trObj = obj.parentElement.parentElement;
  for(i=0;i<trObj.children.length;i++) {
      if (obj.checked==true)
        trObj.children[i].style.backgroundColor="E8F2FE";
      else
        trObj.children[i].style.backgroundColor=trObj.style.backgroundColor;
  }
}

//lov window function
function focusLov(obj) {
  obj.oldValue = obj.value;
}

function isExeLov(obj) {
  if (obj.oldValue!=obj.value)
    return true;
  else
    return false;
}

function openLov(elementId) {
  var elementObj = document.getElementById(elementId);
  var lovUrl;
  eval("lovUrl = '"+ elementObj.lovUrl + "';");
  var lovField = elementObj.lovField;
  
  if (isNull(lovUrl)||isNull(lovField))
  	return;
  returnValue = window.showModalDialog(lovUrl,null,"dialogHeight: 400px; dialogWidth: 500px; center: Yes; help: No; resizable: Yes; status: Yes;");
  if (returnValue!=null) {
    elementObj.value = decodeURI(getValueByName(returnValue,lovField));
    elementObj.onblur();
    elementObj.focus();
  }
}

function lovSelect(elementName) {
  for (var i=0;i<document.forms.length;i++) {
    var element = getFieldByName(document.forms[i],elementName);
    if (element!=null){
      window.returnValue = element.value;
      window.close();
      return;
    }
  }
}

function getValueByName(valueStr,paramName) {
  var valueArray = valueStr.split("&");
  var returnValue = "";
  for(var i=0;i<valueArray.length;i++) {
    if (valueArray[i].length>0) {
      var value = valueArray[i].split("=");
      if (value.length==2)
        if (value[0]==paramName&&value[1].length>0) {
          if (returnValue.length>0)
            returnValue = returnValue + ";";
          returnValue = returnValue + value[1];
        }
    }
  }
  return returnValue;
}
//record function
function countRecordKey(sName) {
  var elements = document.getElementsByTagName("input");
  var count = 0;
  for(var i=0;i<elements.length;i++) {
    if(elements[i].type=="checkbox") { 
      if ((elements[i].name != sName + "_key")&&(elements[i].name.indexOf(sName + "_key")==0)&&(elements[i].checked))
        count++;
    }
  }
  return count;
}

function getRecordKey(sName) {
  var values = new Array();
  var elements = document.getElementsByTagName("input");
  var j = 0;
  for(var i=0;i<elements.length;i++) {
    if(elements[i].type =="checkbox") { 
      if ((elements[i].name != sName + "_key")&&(elements[i].name.indexOf(sName + "_key")==0)&&(elements[i].checked)) {
        values[j] = elements[i].value;
        j++;
       }
    }
  }
        
  return values;
}

function doNewAction(sName,sUrl) {
  document.location = sUrl;
}

function doEditAction(sName,sUrl) {
  if (countRecordKey(sName)!=1) {
    promptMsg(NEED_SELECT_ONE_RECORD);
    return;
  }
  
  var keys = getRecordKey(sName);
  executeUrl(sUrl,keys);
}

function doDupAction(sName,sUrl) {
  if (countRecordKey(sName)!=1) {
    promptMsg(NEED_SELECT_ONE_RECORD);
    return;
  }
  
  var keys = getRecordKey(sName);
  executeUrl(sUrl,keys);
}

function doDelAction(sName,sUrl) {
  if (countRecordKey(sName)==0) {
    promptMsg(NO_RECORD_SELECTED);
    return;
  }
  
  if (!confirmMsg(DELETE_CONFIRM))
    return;
  
  var keys = getRecordKey(sName);
  executeUrlXml(sUrl,keys);
}

function doSaveAction(sName,sUrl) {
  if(sUrl.indexOf("javascript:")==0)
    eval(sUrl.substring(sUrl.indexOf(":")+1));
  else
    submitForm(sName + "Form",sUrl);
}

function doBackAction(sName,sUrl) {
  document.location = sUrl;
}

function doCloseAction() {
  self.close();
}
function showReference(sName) {
  if (countRecordKey(sName)!=1) {
    promptMsg(NEED_SELECT_ONE_RECORD);
    return;
  }
  
  var keys = getRecordKey(sName);
  var sUrl = "../docman/documentRefList.do?modelId=" + sName + "&modelValue=" + encodeURIComponent(keys);
  window.open(sUrl);
}

function showSearch(sName) {
  var searchDiv = document.getElementById(sName + "SearchDiv");
  if (searchDiv==null)
    alert("No search Div found.");
  else {
    curDialogDiv = searchDiv;
    showMask();
    showDiv(curDialogDiv);
  }
}

function doSearch(sName,sUrl) {
  submitForm(sName + "Form",sUrl);
}

function selectAction(sName) {
  if (countRecordKey(sName)==0) {
    promptMsg(NO_RECORD_SELECTED);
    return;
  }
  
  var keys = getRecordKey(sName);
  var strValue = ""
  for (var i=0;i<keys.length;i++) {
  	if (strValue.length>0)
  	  strValue = strValue + "&";
    strValue = strValue + keys[i];
  }
  window.returnValue = strValue;
  window.close();
}

function cancelAction() {
  window.returnValue = "";
  window.close();
}

function overBlockTd(e) {
  if (!e)
  var e=window.event;
  var S=e.srcElement;
  while (S.tagName!="TD")
  {S=S.parentElement;}
  S.className="blockTdOver";
}

function outBlockTd(e) {
  if (!e)
  var e=window.event;
  var S=e.srcElement;
  while (S.tagName!="TD")
  {S=S.parentElement;}
  S.className="blockTd";
}

//tab page function
function clickTab(tabPageName) {
  if (document.getElementById(tabPageName).className=="tabSelected")
    return;

  var tabName = tabPageName.substring(0,tabPageName.indexOf("_"));
  var strTab = getCookie("ACTIVED_TAB");
  var newStrTab = "";

  if ((typeof(strTab) == "undefined")||(strTab == "")) {
    newStrTab = "|" + tabPageName;
  }
  else {
	  var arrTab = strTab.split("|");
	  var finded = false;
    
	  for(var i=0;i<arrTab.length;i++){
      if (arrTab[i] == "")
        continue;
	    if (arrTab[i].indexOf(tabName+"_")==0) {
	      arrTab[i] = tabPageName;
        finded = true;
	    }
	    newStrTab = newStrTab + "|" + arrTab[i];
	  }
    
    if (!finded)
      newStrTab = newStrTab + "|" + tabPageName;
  }
  addCookie("ACTIVED_TAB",newStrTab,0);
  
  activeTab(tabPageName);
}

function activeTab(tabPageName) {
  if (tabPageName=="")
    return;

  var tabName = tabPageName.substring(0,tabPageName.indexOf("_"));
  var activedTabPage = "";
  try {
    eval("activedTabPage = " + tabName + "_actived;");
  }
  catch(exception){
    return;
  }

  if (activedTabPage!=tabPageName) {
    if (document.getElementById(tabPageName)==null)
      return;
    
    document.getElementById(activedTabPage).className = "tabNormal";
    document.getElementById(activedTabPage + "Div").style.display = "none";
    document.getElementById(tabPageName).className = "tabSelected";
    document.getElementById(tabPageName + "Div").style.display = "block";
    eval(tabName + "_actived = tabPageName;");
  }
}

function initTab(){
  var strTab = getCookie("ACTIVED_TAB");
  if ((typeof(strTab) == "undefined")||(strTab == ""))
    return;
  //if var arrTab
  var arrTab = strTab.split("|");
  for(var i=0;i<arrTab.length;i++){
    activeTab(arrTab[i]);
  }
}

//div window function
var maskDiv;
var maskDivShim;
var processDiv;
var curDialogDiv;
var moveObj;
var oldX;
var oldY
var moveObjSpace = 0;
function startMove(obj) {
  if(event.button==1)
    if((moveObj=='')||(moveObj==null)) {
      moveObj = obj.parentNode;
      oldX = event.clientX; 
      oldY = event.clientY; 
      obj.setCapture();
    }            
}

function move(obj) {
  if((moveObj!='')&&(moveObj!=null)) {
    moveObj.style.left = event.clientX + parseInt(moveObj.style.left) - oldX; 
    moveObj.style.top = event.clientY + parseInt(moveObj.style.top) - oldY; 
    oldX = event.clientX; 
    oldY = event.clientY; 
    moveObjSpace = moveObj.style.posTop - document.body.scrollTop;
  }
}

function stopMove(obj) {
  obj.releaseCapture();
  moveObj = null;
}

//head menu function
function overHeadMenu(obj) {
  obj.className="headMenuOver";
}

function outHeadMenu(obj) {
  obj.className="headMenuOut";
}

//pop menu function
var currentMenu;
/*
function menuOver(obj,menu) {
  if (obj.className == "popMenuItem")
  {
    menuItem = menu.getSubItemById(obj.id);
    menuItem.menuShow();
    obj.className = "popMenuItemOver";
  }
}

function menuOut(obj,menu) {
  menuItem = menu.getSubItemById(obj.id);
  if (!menuItem.haveChild()) {
    if (obj.className == "popMenuItemOver")
    obj.className = "popMenuItem";
  }
}
*/

function menuItemOver(itemObj) {
  initMenuObj(itemObj.parentNode.parentNode.parentNode.parentNode);
  if (itemObj.className == "popMenuItem")
  {
    itemObj.className = "popMenuItemOver";
  }
  window.event.cancelBubble = true;
}

function menuItemOut(itemObj) {
  if (itemObj.className == "popMenuItemOver")
  {
    itemObj.className = "popMenuItem";
  }
  window.event.cancelBubble = true;
}

function menuFolderOver(folderObj) {
  initMenuObj(folderObj.parentNode.parentNode.parentNode.parentNode);
  if (folderObj.className == "popMenuItem")
  {
    folderObj.className = "popMenuItemOver";
    var folderLov = document.getElementById(folderObj.id+"Div");
    folderLov.style.display = "block";
    var left = document.body.scrollLeft + folderObj.offsetLeft + folderObj.offsetWidth;
    var top = document.body.scrollLeft + folderObj.offsetTop + 2;
    folderLov.style.left = left;
    folderLov.style.top = top;
  }
  window.event.cancelBubble = true;
}

function menuFolderOut(folderObj) {
  if (folderObj.className == "popMenuItemOver")
  {
    var folderLov = document.getElementById(folderObj.id+"Div");
    if (folderLov.style.display=="none")
      folderObj.className = "popMenuItem";
  }
  window.event.cancelBubble = true;
}

function initMenuObj(menuObj) {
  var bodyObj = menuObj.firstChild.firstChild.firstChild;
  	if(bodyObj.hasChildNodes()){ 
      var nodes = bodyObj.childNodes; 
      for(var i=0;i<nodes.length;i++) {
        var itemObj = nodes[i];
        //alert(itemObj.className);
        //alert(itemObj.id);
        //alert(itemObj.className);
        itemObj.className = "popMenuItem";
        itemObj.disabled = false;
        if (itemObj.id!="") {
          var folderLov = document.getElementById(itemObj.id+"Div");
          initMenuObj(folderLov);
          folderLov.style.display="none";
        }
        else {
          if (itemObj.disabledFlag=="true") {
            itemObj.disabled = true;
          }
          else if (itemObj.supportRecord==null) {
            if (countRecordKey(itemObj.blockName)==0)
              itemObj.disabled = true;
            else if(countRecordKey(itemObj.blockName)>1&&itemObj.supportMulti=="false")
              itemObj.disabled = true;
          }
          
          if (itemObj.disabled==null||itemObj.disabled!=true) {
	        if (!isNull(itemObj.validateJs)) 
	          eval("itemObj.disabled = !(" + itemObj.validateJs + ")");
	        else
	          itemObj.disabled = false;
	      }
        }
      }
    }
}

function showMenu(menuName) {
  var menuObj = document.getElementById(menuName);
  if (menuObj==null) {
    alert("Error!Menu not found!");
    return;
  }
  initMenuObj(menuObj);
  
  if (currentMenu!=null) {
    document.getElementById(currentMenu).style.display="none";
  }
  
  //var left = document.body.scrollLeft + srcObj.offsetLeft;
  
  var srcObj = document.getElementById(menuName + "Img");
  var left = getAbsoluteLeft(srcObj);
  var top = getAbsoluteTop(srcObj) + srcObj.clientHeight + 4;

  menuObj.style.left = left;
  menuObj.style.top = top;
  menuObj.style.display="block";

  currentMenu = menuName;
  document.attachEvent("onclick", clickMenu);
  
  //window.event.cancelBubble=true;
}

function popMenu(menuName,left,top) {
  var menuObj = document.getElementById(menuName);
  if (menuObj==null) {
    alert("Error!Menu not found!");
    return;
  }
  initMenuObj(menuObj);
  
  if (currentMenu!=null) {
    document.getElementById(currentMenu).style.display="none";
  }
  
  menuObj.style.left = left;
  menuObj.style.top = top;
  
  menuObj.style.display="block";

  currentMenu = menuName;
  document.attachEvent("onclick", clickMenu);
  
  //window.event.cancelBubble=true;
}

function clickMenu() {
  menuObj = document.getElementById(currentMenu);
  if (menuObj != null) {
    hideMenu(menuObj);
  }
  document.detachEvent("onclick", clickMenu);
  window.event.cancelBubble=true;
}

function hideMenu(menuObj) {
  var bodyObj = menuObj.firstChild.firstChild.firstChild;
  if(bodyObj.hasChildNodes()){ 
    var nodes = bodyObj.childNodes; 
    for(var i=0;i<nodes.length;i++) {
      var itemObj = nodes[i];
      if (itemObj.id!="") {
        var folderLov = document.getElementById(itemObj.id+"Div");
        hideMenu(folderLov)
      }
    }
  }
  menuObj.style.display = "none";
}

function doPopMenu(itemObj,sUrl) {

  menuObj = document.getElementById(currentMenu);
  if (menuObj != null) {
    hideMenu(menuObj);
  }
  
  if (!isNull(itemObj.confirmJs)) {
    var confirmResult;
    eval("confirmResult = " + itemObj.confirmJs);
    if (!confirmResult)
      return;
  }
  
  if (isNull(itemObj.ignoreKey)) {
    sName = itemObj.blockName;
    var valueArray = getRecordKey(sName);
    if (sUrl.indexOf("?")<0)
      sUrl = sUrl + "?";
    else
      sUrl = sUrl + "&";
    for (var i=0;i<valueArray.length;i++) {
      sUrl = sUrl + valueArray[i] + "&";
    }
    if (sUrl.substring(sUrl.length-1)=="&"||sUrl.substring(sUrl.length-1)=="?")
      sUrl = sUrl.substring(0,sUrl.length-1);
  } 
  
  if (!isNull(itemObj.prompt)) {
    alert(itemObj.prompt);
  }
  
  if (!isNull(itemObj.inquire)) {
    if (!confirm(itemObj.inquire))
      return;
  }
  
  if (isNull(itemObj.newWindow)) {
    showPrompt();
    if (syncExcute(sUrl)&&(itemObj.refresh==null))
      refreshPage();
    hidePrompt();  
  }
  else {
    if (itemObj.newWindow == "dialog") {
      var sFeatures;
      if (isNull(itemObj.windowSize))
        sFeatures = "dialogHeight: 400px; dialogWidth: 500px;";
      else
        sFeatures = itemObj.windowSize;
        
      sFeatures = sFeatures + " center: Yes; help: No; resizable: Yes; status: Yes;";
      returnValue = window.showModalDialog(sUrl,window,sFeatures);

      if (REFRESH_PAGE==true&&itemObj.refresh==null) {
        refreshPage();
        REFRESH_PAGE = false;
      }
      else {
        if (returnValue=="refresh")
           refreshPage();
        //if (returnValue!="undefined"&&returnValue!=null) {
        //  alert(returnValue);
        //  refreshPage();
        //}
      }
    }
    else
      window.open(sUrl);
  }
}

function doCustomPopMenu(itemObj,actionJs) {
  menuObj = document.getElementById(currentMenu);
  if (menuObj != null) {
    hideMenu(menuObj);
  }
  eval(actionJs + "(itemObj)");
}

function validateStatusMenu(itemObj,eventName) {
  var objName = itemObj.blockName;
  //var elements = document.getElementsByTagName("input");
  var statusEventList = "";
  /*
  for(var i=0;i<elements.length;i++) {
    if(elements[i].type =="checkbox") { 
      if ((elements[i].name!=objName + "_key")&&(elements[i].name.indexOf(objName+"_key")==0)&&(elements[i].checked)) {
        var index = elements[i].name.substring(objName.length+4);

        eval("statusEventList = " + objName + "_statusEvent[" + index + "]");
        statusEventList = "," + statusEventList + ",";
        if (statusEventList.indexOf( "," + eventName + ",")<0) {
          return false;
        }
      }
    }
  }
  */
  var checkdLines = getCheckedLines(objName);
  for(var i=0;i<checkdLines.length;i++) {
    eval("statusEventList = " + objName + "_statusEvent[" + checkdLines[i] + "]");
    statusEventList = "," + statusEventList + ",";
    if (statusEventList.indexOf( "," + eventName + ",")<0) {
      return false;
    }
  }
  return true;
}

function getCheckedLines(objName) {
  var checkedLines = new Array();
  var elements = document.getElementsByTagName("input");
  for(var i=0;i<elements.length;i++) {
    if(elements[i].type =="checkbox") { 
      if ((elements[i].name!=objName + "_key")&&(elements[i].name.indexOf(objName+"_key")==0)&&(elements[i].checked)) {
        var index = elements[i].name.substring(objName.length+4);
        checkedLines[checkedLines.length] = index;
      }
    }
  }
  return checkedLines;
}

function getAllLines(objName) {
  var lines = new Array();
  var elements = document.getElementsByTagName("input");
  for(var i=0;i<elements.length;i++) {
    if(elements[i].type =="checkbox") { 
      if ((elements[i].name!=objName + "_key")&&(elements[i].name.indexOf(objName+"_key")==0)) {
        var index = elements[i].name.substring(objName.length+4);
        lines[lines.length] = index;
      }
    }
  }
  return lines;
}

function getAbsoluteTop(obj){
  var t = 0;
  while(obj){
    if (obj.tagName=='BODY')
      break;    
    t += obj.offsetTop;
    obj = obj.offsetParent;
  }
  return t;
}

function getAbsoluteLeft(obj){
  var l = 0;
  while(obj){
    if (obj.tagName=='BODY')
      break;    
    l += obj.offsetLeft;
    obj = obj.offsetParent;
  }
  return l;
}

//windows function

function refreshPage() {
  if (DIALOG_PAGE==false)
    window.location = CURRENT_ACTION_URL;
  else
    hrefReload.click();
}

function resetSize() {
  if (curDialogDiv!=null||processDiv.style.display=="block") {
    maskDiv.style.height = document.body.scrollHeight + "px";
    maskDiv.style.width = document.body.scrollWidth + "px";
    maskDivShim.style.height = maskDiv.style.height;
    maskDivShim.style.width = maskDiv.style.width;
  }
}

function showMask() {
  resetSize();
  maskDiv.style.zIndex = 5;
  maskDiv.style.display = "block";
  maskDivShim.style.zIndex = maskDiv.style.zIndex -1;
  maskDivShim.style.display = "block";
}

function hideMask() {
  maskDiv.style.display = "none";
  maskDivShim.style.display = "none";
}

function isMask() {
	if (maskDiv.style.display=="block")
		return false;
	return true;
}

function showDiv(objDiv) {
  objDiv.style.display = "block";
  objDiv.style.left = ((document.body.offsetWidth - objDiv.offsetWidth) / 2);
  objDiv.style.top = ((document.body.offsetHeight - objDiv.offsetHeight) / 2);
}

function hideDiv(objDiv) {
  hideMask();
  objDiv.style.display = "none";
}

function hideDivByName(divName) {
  var divObj = document.getElementById(divName);
 
  if (divObj!=null) {
    var formName = divName.substring(0,divName.length-9) + "Form";
    var formObj = getFormByName(formName);
    formObj.reset();
    hideDiv(divObj)
  }
}

function initWindow() {
  maskDiv = document.createElement("div");
  maskDiv.id = "JovenMaskDiv";
  maskDiv.className = "overlay";
  maskDiv.oncontextmenu = "return false";
  document.body.appendChild(maskDiv);
  maskDivShim = document.createElement("<iframe name='JovenMaskDivShim' scrolling='no' frameborder='0'"+
                                      "style='position:absolute; top:0px;"+
                                      "left:0px; display:none'></iframe>"); 
  maskDivShim.style.filter="progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)";
  maskDiv.offsetParent.appendChild(maskDivShim);
  
  processDiv = document.createElement("div");
  processDiv.id = "JovenProcessDiv";
  processDiv.className = "processDiv";
  processDiv.style.position="absolute";
  processDiv.style.zIndex = 999999;
  processDiv.style.display = "none";
  document.body.appendChild(processDiv);
  
  if (document.body.onload!=null)
    eval(document.body.onload);
  
  if (typeof(JOVEN_OPEN_URL)!="undefined")
    if (!(JOVEN_OPEN_URL==null||JOVEN_OPEN_URL==""))
      window.location.href = JOVEN_OPEN_URL;
}

function bindHandlers() {
    var inputs = document.getElementsByTagName("input");
    var selects = document.getElementsByTagName("select");
    var textareas = document.getElementsByTagName("textarea");
    var fields = new Array();
    for (var i=0; i<inputs.length; i++) {
	  fields[fields.length] = inputs[i];
	}
	for (var i=0; i<selects.length; i++) {
	  fields[fields.length] = selects[i];
	}
	for (var i=0; i<textareas.length; i++) {
	  fields[fields.length] = textareas[i];
	}
    for (var i=0; i < fields.length; i++) {
        if (fields[i].type=="text"||fields[i].type=="password"||fields[i].type=="select-multiple"||fields[i].type=="select-one"||fields[i].type=="textarea") {
            if (fields[i].name == "displayPageNum")
            	continue;
            if (fields[i].onblur==null)
              fields[i].onblur = function() {blurField(this);};
            else {
              //fields[i].onblur();
              var sScript = "" + fields[i].onblur;
              var nIndex = sScript.indexOf("{") + 2;
              var sStart = sScript.substring(0,nIndex);
              var sEnd = sScript.substring(nIndex);
              sScript = sStart + "blurField(this);\n" + sEnd;
              eval("fields[i].onblur = " + sScript);
            }

            if (fields[i].onfocus==null)
              fields[i].onfocus = function() {focusField(this);};
            else {
              var sScript = "" + fields[i].onfocus;
              var nIndex = sScript.indexOf("{") + 2;
              var sStart = sScript.substring(0,nIndex);
              var sEnd = sScript.substring(nIndex);
              sScript = sStart + "focusField(this);\n" + sEnd;
              eval("fields[i].onfocus = " + sScript);
            }
        }
    }
}

function initHotKey() {
  document.body.onkeydown = function() {
    if (event.keyCode==8) {
      var srcObj = event.srcElement;
      if (srcObj.tagName=="BODY")
        return false;
      else if (srcObj.tagName=="TD")
        return false;
      else if (srcObj.tagName=="A")
        return false;
      else if (srcObj.tagName=="SELECT")
        return false;
      else if (srcObj.tagName=="INPUT"&&(srcObj.type=="button"||srcObj.type=="checkbox"))
        return false;
    }
  }
}

function initTitle() {
  if (document.title) {
    //if (window != top)
    if (parent.location.href != self.location.href) 
      parent.setTitle(document.title);
  }
}

function initMessage() {
  if (typeof(JOVEN_ERROR_INFO)!="undefined")
    if (!(JOVEN_ERROR_INFO==null))
  	  promptMsg(JOVEN_ERROR_INFO);
  	  
  if (typeof(JOVEN_PROMPT_INFO)!="undefined")
    if (!(JOVEN_PROMPT_INFO==null))
      for (var i=0; i < JOVEN_PROMPT_INFO.length; i++) {
        promptMsg(JOVEN_PROMPT_INFO[i]);
      }
}

function loadWindow() {
  initTitle();
  bindHandlers();
  initHotKey();
  initWindow();
  initTab();
  initMessage();
  window.onresize = resetSize;
}
if (document.all){
  window.attachEvent('onload',loadWindow)
}
else{
  window.addEventListener('load',loadWindow,false);
}
/*
window.onload = function() {
  initWindow();
};
*/