







var FEATURE_PR = true;
var FEATURE_HR = true;
var FEATURE_TA = true;
var POLICY_TIMEOFF_REQUEST = true;
var POLICY_TIMESHEET = true;
var POLICY_TIMESHEET_CHANGEREQUEST = true;
var POLICY_OVERTIME_REQUEST = true;
var POLICY_BENEFIT_ENROLLMENT = true;
var POLICY_PERFORMANCE_REVIEW = true;



var jeyt = { util: {}, dom: {} };

function formatNumber2(val, options) {
  if (isNaN(val)) {
    if(options && options.ifNull){
      return options.ifNull;
    }
    return '';
  }
  var neg = false;
  if (val < 0) {
    neg = true;
    val = -val;
  }
  if(options){
    if(val==0 && options.ifZero){
      return options.ifZero;
    }
  }
  var s = "" + val;

  if (neg && options && options.negStyle){
    if(options.negStyle=='()'){
      s = '(' + s + ')';
      neg = false;
    }
  }
  if (neg) {
    s = "-" + s;
  }
  return s;
}


var HM_DOM  = true;
var HM_IE   = false;
var HM_OPER = false;
var HM_MOZ  = false;
var HM_CHRO = false;
var HM_IEVER=5;
var HM_MSIE11 = false
var HM_EDGE = false;
if(HM_IE) {
  try {
    HM_IEVER=parseFloat(navigator.appVersion.split("MSIE")[1]);
  } catch(e) {}
}

function isIE(){
  return HM_IE;
}

function isOpera() {
  return HM_OPER;
}

function isMozilla() {
  return HM_MOZ;
}

function isMsIE11(){
  return HM_MSIE11;
}

function isEdge(){
  return HM_EDGE;
}

function stopBubble(ev) {
 if (isNull(ev)) return;
 ev.cancelBubble=true;
 if (!isNull(ev.preventDefault)) {
   ev.preventDefault();
 }
 if (!isNull(ev.stopPropagation)) {
   ev.stopPropagation();
 }
}

function stopBubble_DontPreventDefault(ev) {
 ev.cancelBubble=true;
 if (!isNull(ev.stopPropagation)) {
   var sp = ev.stopPropagation();
 }
}

function getDocElm(elm) {
 
   var r = document.getElementById(elm);
   if (isNull(r) && !isNull(document.TheForm)) {
     r = TheForm[elm];
   }
   return r;
 
}

function getPageX() {
  
   return document.scrollingElement.scrollLeft;
  
}

function getPageY() {
  
  return document.scrollingElement.scrollTop;
  
}

function getRelativeClickPosition(event, element, relative) {
  if (!event) {
    var event = window.event;
  }
  if (!event) {
    return {
      x: getPageX(),
      y: getPageY()
    }
  }
  if (!element || !relative) {
    return {
      x: event.pageX,
      y: event.pageY
    }
  }

  var clickX = event.pageX - relative.position().left;
  var clickY = event.pageY - relative.position().top;

  var relWidth = relative.outerWidth();
  var relHeight = relative.outerHeight();

  var elWidth = element.outerWidth();
  var elHeight = element.outerHeight();

  var X;
  if((relWidth - clickX) < elWidth) {
    X = relWidth - elWidth;
  } else {
    X = clickX;
  }

  var Y;
  if((relHeight - clickY) < elHeight) {
    Y = relHeight - elHeight;
  } else {
    Y = clickY;
  }

  return {
    x: X,
    y: Y
  }
}

function pageWidth() {return window.innerWidth != null? window.innerWidth : document.documentElement && document.documentElement.clientWidth ?       document.documentElement.clientWidth : document.body != null ? document.body.clientWidth : null;}
function pageHeight() {return  window.innerHeight != null? window.innerHeight : document.documentElement && document.documentElement.clientHeight ?  document.documentElement.clientHeight : document.body != null? document.body.clientHeight : null;}
function posLeft() {return typeof window.pageXOffset != 'undefined' ? window.pageXOffset :document.documentElement && document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ? document.body.scrollLeft : 0;}
function posTop() {return typeof window.pageYOffset != 'undefined' ?  window.pageYOffset : document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ? document.body.scrollTop : 0;}
function posRight() {return posLeft()+pageWidth();}
function posBottom() {return posTop()+pageHeight();}

function setStatus(s) {window.status = s;return true;}
setStatus('');

if (!Array.isArray) {
  Array.isArray = function (obj) {
    return Object.prototype.toString.call(obj) === "[object Array]";
  };
}

function isUndef(ver){return ( ver === undefined ||  ver == this._undef);}
function isNull(ver) {return ( ver === undefined ||  ver == null || ver == this._undef);}

function trim(s){
  if(isNull(s) || s=="") return "";
  var i=0;
  for(i=0; i<s.length; i++) {
    var c = s.charCodeAt(i);
    if (c >= 33){ break; }
  }
  var j;
  for(j=s.length-1; j>=i; j--) {
    var c = s.charCodeAt(j);
    if (c >= 33){ break; }
  }
  s = s.substring(i,j+1);
  return s;
}

function _onchange(_c){if(!isNull(_c)&&!isNull(_c.onchange)){_c.onchange();}}

function isBlank(s){return (trim(s).length==0);}

function escapeStr(str){
	var s;

    if (typeof str  != 'undefined') {
    // Add an extra layer of encoding to avoid cases when some param`s value has a single quote in it
    // and url gets trimmed up to this single quote (see WFR-70856)
    	s = encodeURIComponent(str).replace(/'/g, '%27');
    }
    return s;
}

function unescapeStr(str){
  var s = decodeURIComponent(str);
  return s;
}
function parseBoolean(val, defValue){
  val = ''+val;
  if(val=='' || val==null)return defValue;

  val = val.substring(0,1);

  if(val=='1')return true;
  if(val=='t' || val=='T')return true;
  if(val=='Y' || val=='y')return true;

  if(val=='0')return false;
  if(val=='f' || val=='F')return false;
  if(val=='N' || val=='n')return false;

  return defValue;
}

function parseNumber(val,_defVal,groupSep,decSep) {

    val = formatInUSDecimal(val,groupSep,decSep);

  if (isNull(val) || trim(val).length == 0)
    return isNull(_defVal)?0:_defVal;

  var haveDecimal=false;

  if (val.charAt(0) == '(' && val.charAt(val.length-1) == ')') {
    val = "-" + val.substring(1, val.length-1);
  }
  val = val.replace( "$", "" );
  val = val.replace( "%", "" );

  var charOne = val.charAt(0);
  var ret="";
  if (charOne == '+' || charOne == '-' || charOne == '.' || !isNaN(charOne)){
    var ret=""+charOne;
    haveDecimal = (charOne=='.');
  }

  for (var i = 1; i < val.length; i++) {
    var curChar = val.charAt(i);
    if (curChar == '.'){
      if(!haveDecimal){
        haveDecimal = true;
        ret = ret + curChar;
      }
      continue;
    }
    if(isNaN(curChar))
      continue;
    ret = ret + curChar;
  }
  if (isNaN(ret)){
    return isNull(_defVal)?0:_defVal;
  }
  return parseFloat(ret);
}

function parseNumber_Int(val,_defVal) {
  if (isNull(val) || trim(val).length == 0)
    return isNull(_defVal)?0:_defVal;

  if (val.charAt(0) == '(' && val.charAt(val.length-1) == ')') {
    val = "-" + val.substring(1, val.length-1);
  }
  val = val.replace( "$", "" );
  val = val.replace( "%", "" );

  var charOne = val.charAt(0);
  var ret="";
  if (charOne == '.') {
    return 0;
  }
  var i = 0;
  var sign='';
  if (charOne == '+' || charOne == '-'){
    sign=charOne;
    i=1;
  }

  for (; i < val.length; i++) {
    var curChar = val.charAt(i);
    if (curChar == '.'){
      break;
    }
    if(isNaN(curChar))
      continue;
    if (ret.length==0 && curChar=='0') {
      continue;
    }
    ret = ret + curChar;
  }
  if (isNaN(ret)){
    return isNull(_defVal)?0:_defVal;
  }
  ret=sign+ret;
  if (ret > 2147483647) {
    return 2147483647;
  } else if (ret < -2147483648) {
    return -2147483648;
  }
  return parseInt(ret);
}

function setInnerText(el, text) {
  if ('string' == typeof el.textContent) { el.textContent = text; return; }
  if ('string' == typeof el.innerText) { el.innerText = text; return; }
  el.innerHTML = "x"; //replaces existing HTML with dummy text node
  el.firstChild.nodeValue = text;
}

function getInnerText(el) {
  if ('string' == typeof el.textContent) return el.textContent;
  if ('string' == typeof el.innerText) return el.innerText;
  return el.innerHTML.replace(/<[^>]*>/g,'');
}

function parseNumberStrict(val,_defVal,groupSep,decSep) {
  val = formatInUSDecimal(val,groupSep,decSep);
  if (!isNull(val)) { val = val + ""; }
  if(isUndef(_defVal)){_defVal = 0;}

  if (isNull(val) || trim(val).length == 0)
    return _defVal;

  val = val.replace("$", "");
  val = val.replace("ï¿½", "");
  val = val.replace("ï¿½", "");

  val = trim(val);
  if (val.charAt(0) == '$')
    val = val.substring(1);
  if (val.charAt(val.length-1) == '%')
    val = val.substring(0, val.length-1);
  var sign="";
  if (val.charAt(0) == '-') {
    val = val.substring(1);
    sign="-";
  } else if (val.charAt(0) == "+") {
    val = val.substring(1);
  }

  var ret="";
  var bHavDecimal = false;

  for (var i = 0; i < val.length; i++) {
    var curChar = val.charAt(i);
    if (curChar == ',') {
      continue;
    }
    if (curChar == '.') {
      if (bHavDecimal){
        ret=null; break;
      } else {
        bHavDecimal = true;
      }
      ret = ret + curChar;
      continue;
    }
    if(isNaN(curChar)){
      ret=null;break;
    }
    ret = ret + curChar;
  }
  if (isNaN(ret)){
    return _defVal;
  }
  ret = parseFloat(sign+ret);
  if (isNaN(ret)){
    return _defVal;
  }
  return ret;
}

function verifyMoney(v1,v2){
  return verifyFloat(v1,v2);
}



function reInt(v1,v2,bZero){
  var i = parseNumber_Int(v1,v2);

  if (isNaN(i)) {
    return isNull(v2)?'':v2;
  }
  i = Math.floor(i);

  if (i == 0){
    return bZero ? '0' : '';
  }
  return i;
}
function reLong(v1,v2,bZero,vMin,vMax){
  if(isBlank(v1)){
    return isNull(v2)?'':v2;
  }
//need to add support for large numbers
  return v1;
}

function formatInLocalizedDecimal(value,groupSep,decimalSep){
  if(isNull(value) || isNull(groupSep) || isNull(decimalSep)){
    return value;
  }

  value = value.split(",").join("group");
  value = value.split(".").join("dec");
  value = value.split("group").join(groupSep);
  value = value.split("dec").join(decimalSep);
  return value;
}

function formatInUSDecimal(value,groupSep,decimalSep){
  if(isNull(value) || isNull(groupSep) || isNull(decimalSep)){
    return value;
  }

  if(groupSep!="." && decimalSep!="."){
    if(groupSep=="," || decimalSep==","){
    value = value.split(".").join(",");
    } else {
      value = value.split(".").join(" ");
    }
  }
  if(groupSep!="," && decimalSep!=","){
    if(groupSep=="." || decimalSep=="."){
    value = value.split(",").join(".");
    } else {
      value = value.split(",").join("");
    }
  }
  value = value.split(groupSep).join("group");
  value = value.split(decimalSep).join("dec");
  value = value.split("group").join(",");
  value = value.split("dec").join(".");
  return value;
}

function reDouble(v1,v2,ndp,negOk,zeroOK,groupSep,decimalSep){
  if(isBlank(v1)){
    return isNull(v2)?'':v2;
  }

  v1 = formatInUSDecimal(v1,groupSep,decimalSep);

  var i = parseNumber(v1,v2);
  if (isNaN(i) || isNull(i) || i==='') {
    return isNull(v2)?'':v2;
  }
  if (i < 0 && !negOk) {
    i = -i;
  }
  if (i == 0) {
    if(zeroOK)
      return '0';
    else
      return '';
  }
  if (ndp >= 0) {
    var s = i+"";
    var indx = s.indexOf(".");
    if (indx !=-1) {
      if (ndp == 0) {
        s=s.substring(0,indx);
        return formatInLocalizedDecimal(s,groupSep,decimalSep);
      }
      if (s.length - (indx+1) > ndp) {
        s = s.substring(0, indx+ndp+1);
        return formatInLocalizedDecimal(s,groupSep,decimalSep);
      }
    }
  }
  return formatInLocalizedDecimal((i+""),groupSep,decimalSep);
}

function reDoubleExtra(v1,v2,ndp,negOk,zeroOK,groupSep,decimalSep,fillToPrecision){
  fillToPrecision=fillToPrecision||false;

  if(isBlank(v1)){
    return isNull(v2)?'':v2;
  }

  v1 = formatInUSDecimal(v1,groupSep,decimalSep);

  var i = parseNumber(v1,v2);
  if (isNaN(i) || isNull(i) || i==='') {
    return isNull(v2)?'':v2;
  }
  if (i < 0 && !negOk) {
    i = -i;
  }
  if (i == 0) {
    if(zeroOK) {
      var s = "0";
      if (fillToPrecision) {
        if (ndp > 0) {
          s = s + ".";
        }
        for (var ind = 0; ind < ndp; ind++){
          s = s + "0";
        }
      }
      return formatInLocalizedDecimal(s,groupSep,decimalSep);
    } else {
      return '';
    }
  }
  if (ndp >= 0) {
    var s = i+"";
    var indx = s.indexOf(".");
    if (indx !=-1) {
      if (ndp == 0) {
        s=s.substring(0,indx);
        return formatInLocalizedDecimal(s,groupSep,decimalSep);
      }
      if (s.length - (indx+1) > ndp) {
        s = s.substring(0, indx+ndp+1);
        return formatInLocalizedDecimal(s,groupSep,decimalSep);
      } else if (fillToPrecision) {
        while (s.length != indx + ndp + 1) {
          s = s + "0";
        }
      }
    } else if (fillToPrecision){
      s = s + ".";
      for (var ind = 0; ind < ndp; ind++){
        s = s + "0";
      }
    }
    return formatInLocalizedDecimal(s,groupSep,decimalSep);
  }

  return formatInLocalizedDecimal((i+""),groupSep,decimalSep);
}

function reMonthDay(v1, pattern){
  var sep='';
  var vals;
  var month;
  var day;

  if (pattern.length == 5) {
    sep = pattern.charAt(2);
    vals = v1.split(/[\/\\\-\., ]/); //regex for "/\\-., "
    if (vals.length < 2) {
      vals = new Array();
      vals[0] = v1.substring(0,2);
      vals[1] = v1.substring(3,5);
    }
  } else if (pattern.length == 4) {
    vals = new Array();
    vals[0] = v1.substring(0,2);
    vals[1] = v1.substring(2,4);
  } else {
    return '';
  }

  var firstTwoChars = pattern.substring(0,2);
  if (firstTwoChars == 'dd') {
    day = vals[0];
    month = vals[1];
  } else if (firstTwoChars == 'MM') {
    month = vals[0];
    day = vals[1];
  } else {
    return '';
  }

  month = reInt(month, 1);
  day = reInt(day, 1);

  if (month>12) {
    var t = month;
    month=day;
    day=t;
  }

  if (month < 1 || month > 12) {
    month = 1;
  }
  if (day < 1 || day > 31) {
    day = 1;
  }

  month = month + '';
  day = day + '';

  if (month.length == 1) month = '0' + month;
  if (month.length > 2) month = month.substring(0,2);

  if (day.length == 1) day = '0' + day;
  if (day.length > 2) day = day.substring(0,2);

  if(firstTwoChars == 'dd'){
    return day + sep + month;
  }
  return month + sep + day;
}

function formatInt(val, showZero, addCommas) {
  if (val == 0 || isNaN(val)) {
    return showZero?'0':'';
  }
  val = Math.floor(val);
  if (!addCommas) {
    return val+'';
  }
  val2 = '' + val;
  ret = '';
  while (val2.length > 3) {
    ret = val2.substring(val2.length-3) + ret;
    val2 = val2.substring(0, val2.length-3);
    if (val2.length > 0) {
      ret = ',' + ret;
    }
  }
  ret = val2 + ret;
  return ret;
}

function formatPercent(val, numDec, showZero, sep, allowNull, groupSep, decimalSep) {
  var sign = "%";

  if (isNull(numDec)) {
    numDec = 2;
  }
  if(allowNull) {
    if(val == "" || val == null || isNaN(val)) {
      if(!(val===0 && showZero==1)) {
        return "";
      }
    }
  }
  if (isNaN(val)) {
    val = 0;
  }
  if (val==0 && showZero==0) return "";

  var neg = false;
  if (val < 0) {
    neg = true;
    val = -val;
  }
  var prec = Math.pow(10,numDec);
  val = Math.round(val*prec)/prec;

  var afterComma = val - Math.floor(val);
  afterComma = Math.round(afterComma*prec);
  var percents = Math.floor(val);

  var afterCommaStr = "";
  if (numDec>0) {
    afterCommaStr = afterComma+"";
    afterCommaStr = "000000".substring(0, numDec-afterCommaStr.length) + afterComma;
    for(var i=afterCommaStr.length-1;i>1; i--){
      if(afterCommaStr.charAt(i)!='0')break
      afterCommaStr = afterCommaStr.substring(0,i);
    }
    afterCommaStr = "." + afterCommaStr;
  }

  var percentsStr = percents + "";

  var addMinus = "";
  if (neg) {
    addMinus = "-";
  }
  if (!isNull(sep) && percentsStr.length > 3) {
    var ds = '';
    while (percentsStr.length > 3) {
      if (ds.length > 0) ds = sep + ds;
      ds = percentsStr.substring(percentsStr.length-3) + ds;
      percentsStr = percentsStr.substring(0, percentsStr.length-3);
    }
    if(percentsStr.length>0){
      percentsStr = percentsStr + sep + ds;
    }
  }

  var result = addMinus + percentsStr + afterCommaStr + sign;
  result = formatInLocalizedDecimal(result,groupSep,decimalSep);
  return result;

}

function formatMoney(val, roundValue, numDec, addSign, showZero, sep, allowNull, groupSep, decimalSep, companyCurrencySymbol) {
  var sign = "";
  if (addSign) {
    sign = "$";
    if(!isNull(companyCurrencySymbol)){
    	sign=companyCurrencySymbol;
    }
  }
  if (isNull(numDec)) {
    numDec = 2;
  }
  if(allowNull) {
    if(val == "" || val == null || isNaN(val)) {
      if(!(val===0 && showZero==1)) {
        return "";
      }
    }
  }
  if (isNaN(val)) {
    val = 0;
  }
  if (val==0 && showZero==0) return "";

  var neg = false;
  if (val < 0) {
    neg = true;
    val = -val;
  }
  var prec = Math.pow(10,numDec);
  val = Math.round(val*prec)/prec;
  if (!isNull(roundValue) && roundValue == 1)
    val = Math.round(val/prec)*prec;

  var cents = val - Math.floor(val);
  cents = Math.round(cents*prec);
  var dollars = Math.floor(val);

  var centsStr = "";
  if (numDec>0) {
    centsStr = cents+"";
    centsStr = "000000".substring(0, numDec-centsStr.length) + cents;
    for(var i=centsStr.length-1;i>1; i--){
      if(centsStr.charAt(i)!='0')break
      centsStr = centsStr.substring(0,i);
    }
    centsStr = "." + centsStr;
  }

  var dollarsStr = dollars + "";

  var addMinus = "";
  if (neg) {
    addMinus = "-";
  }
  if (!isNull(sep) && dollarsStr.length > 3) {
    var ds = '';
    while (dollarsStr.length > 3) {
      if (ds.length > 0) ds = sep + ds;
      ds = dollarsStr.substring(dollarsStr.length-3) + ds;
      dollarsStr = dollarsStr.substring(0, dollarsStr.length-3);
    }
    if(dollarsStr.length>0){
      dollarsStr = dollarsStr + sep + ds;
    }
  }

  var result = sign + addMinus + dollarsStr + centsStr;
  result = formatInLocalizedDecimal(result,groupSep,decimalSep);
  return result;
}

function formatNumber(val, roundValue, numDec, groupSep, decimalSep) {
  return formatMoney(val, roundValue, numDec, false, 1, ',', false, groupSep, decimalSep);
}

function formatSSN(val, event) {
  if (event.keyCode==8){
    return val;
  }
  var mask = "-";
  val = val.replace(/-/g,'');
  if (val.length >= 5){
    return val.slice(0,3) + mask + val.slice(3,5) + mask + val.slice(5,9);
  }if (val.length >= 3) {
    return val.slice(0,3) + mask + val.slice(3,5);
  } else {
    return val;
  }
}

function formatSIN(val, event) {
  if (event.keyCode==8){
    return val;
  }
  var mask = "-";
  val = val.replace(/-/g,'');
  if (val.length >= 5){
    return val.slice(0,3) + mask + val.slice(3,6) + mask + val.slice(6,9);
  }if (val.length >= 3) {
    return val.slice(0,3) + mask + val.slice(3,6);
  } else {
    return val;
  }
}

function formatNIN(val, event) {
  if (event.keyCode==8){
    return val;
  }
  if(val.length == 0){
  	return val;
  }
  var mask = " ";

  val = val.replace(/-/g,'').replace(/ /g,'').toUpperCase();
  if (val.length < 9){
  	return val;
  }

  return val.slice(0,2) + mask + val.slice(2,4) + mask + val.slice(4,6) + mask + val.slice(6,8) + mask + val.slice(-1);

}

function formatYearsAndMonths(value, maxMonthsTotal, yearSymbol, monthSymbol) {
  var years = 0;
  var months = 0;

  var yearsIndex = value.indexOf(yearSymbol);
  var monthsIndex = value.indexOf(monthSymbol);
  if (yearsIndex == -1 && monthsIndex == -1) {
    if (maxMonthsTotal < 12) {
      months = parseInt(value, 10);
    } else {
      years = parseInt(value, 10);
    }
  } else if (monthsIndex == -1) {
    years = parseInt(value.substring(0, yearsIndex), 10);
  } else if (yearsIndex == -1) {
    months = parseInt(value.substring(0, monthsIndex), 10);
  } else {
    years = parseInt(value.substring(0, yearsIndex), 10);
    months = parseInt(value.substring(yearsIndex + 1, monthsIndex), 10);
  }

  if (isNaN(years) || years < 0) {
    years = 0;
  }
  if (isNaN(months) || months < 0) {
    months = 0;
  }

  var monthsTotal = years * 12 + months;
  if (monthsTotal > maxMonthsTotal) {
    monthsTotal = maxMonthsTotal;
  }

  return Math.floor(monthsTotal / 12) + yearSymbol + " " + (monthsTotal % 12) + monthSymbol;
}

function copyProperties(from, to) {
 for(i in from){
  to[i]=from[i];
 }
}

if (!String.prototype.startsWith) {
	String.prototype.startsWith = function(search, pos) {
		return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search;
	};
}

var _Arguments = null;
function getArguments(){
    if(!isNull(window.dialogArguments)){
      return window.dialogArguments;
    }
    if(isNull(this._Arguments)){
        var _search = document.location.search.substring(1).split('&');
        this._Arguments = new Object();
        for(var i in _search){
            var _nvp = _search[i].split('=');
            if( _nvp!=null && _nvp!=this._undef && _nvp.length==2
             && _nvp[0]!=null && _nvp[0]!=this._undef
             && _nvp[1]!=null && _nvp[1]!=this._undef
             ){
                this._Arguments[_nvp[0]] = unescapeStr(_nvp[1]);
            }
        }
    }
    return this._Arguments;
}

function setArgument(_name,_value){
  getArguments()[_name] = _value;
}
function getArgument(_name){
  return getArguments()[_name];
}

var Funcs_OnResize = new Array();
function resizeWindow() {
  for (var i = 0; i < Funcs_OnResize.length; i++) {
    Funcs_OnResize[i]();
  }
}
var PageLoaded = new Object();
function setPageLoaded() {
  PageLoaded.Loaded = '1';
}
function isPageLoaded() {
 if (isNull(PageLoaded.Loaded)) {
   return false;
 }
 return PageLoaded.Loaded == '1';
}

function isKeyboardNav(event) {
  if (event.keyCode==9 ||
      event.keyCode==13 ||
      event.keyCode==40 ||
      event.keyCode==38 ||
      event.keyCode==33 ||
      event.keyCode==34 ||
      event.keyCode==37 ||
      event.keyCode==39 ||
      event.keyCode==113 ||
      event.keyCode==27
      ) {
    return true;
  }
  return false;
}

function addEvent(elem, type, handler, useCapture){
  if (elem.addEventListener){
    elem.addEventListener(type, handler, useCapture);
  } else {
    elem.attachEvent("on" + type, handler);
  }
}

function addOnClick(func) {addEvent(window, "click", func, true);}
function addOnScroll(func){addEvent(document, "scroll", func, false);}
function addOnResize(func){Funcs_OnResize[Funcs_OnResize.length]=func; addEvent(window, "resize", func, false);}
function addOnFocus(func){addEvent(window, "focus", func, false);}
function addOnBlur(func){addEvent(window, "blur", func, false);}
function addOnUnload(func){addEvent(window, "unload", func, false);}
function addOnLoad(func){addEvent(window, "load", func, true);}
function addOnDomRendering(func){addEvent(document,"DOMContentLoaded", func, true);}
function addOnMouseMove(func){addEvent(document.body, "mousemove", func, true);}
function addOnMouseDown(func){addEvent(document.body, "mousedown", func, true);}
function addOnMouseUp(func){addEvent(document.body, "mouseup", func, true);}
function addOnKeyDown(func){addEvent(window, "keydown", func, true);}
function addOnKeyUp(func){addEvent(window, "keyup", func, true);}
function addOnKeyPress(func){addEvent(window, "keypress", func, true);}

addOnLoad(setPageLoaded);

function getKeyName(keyCode) {
  switch(keyCode) {
    case 13:
      return "ENTER";
    case 27:
      return "ESC";
  }
  if (keyCode >= 32 && keyCode <= 126) {
    return String.fromCharCode(keyCode);
  }
  return keyCode;
}


var event=null;
function netscape_event_cap(e) {
  event = e;
  event.srcElement = event.target;
}
window.addEventListener ("click",netscape_event_cap,true);
window.addEventListener ("mouseup",netscape_event_cap,true);
window.addEventListener ("mousedown",netscape_event_cap,true);
window.addEventListener ("mouseout",netscape_event_cap,true);
window.addEventListener ("mousein",netscape_event_cap,true);


function getEventKeyCode(e) {
  if (typeof( e.keyCode ) == 'number') {
    return e.keyCode;
  } else if ( typeof( e.which ) == 'number' ) {
    return e.which;
  } else if( typeof( e.charCode ) == 'number'  ) {
    return e.charCode;
  }
}

function intersects(x1, y1, w1, h1, x2, y2, w2, h2) {
  return (x2 + w2) > x1 && (y2 + h2) > y1 && x2 < (x1 + w1) && y2 < (y1 + h1);
}

function isParent(parentElm, startElement) {
  var elm = startElement;
  while (!isNull(elm) && elm != parentElm)
    elm = elm.parentNode;
  if (!isNull(elm)) { return true; }
  return false;
}

//poor man's jQuery.fn.closest
function getParentElement(el, tagName, className) {
  var pattern = className ? new RegExp("(^|\\s)" + className + "(\\s|$)") : null;
  tagName = tagName.toLowerCase();

  while ((el = el.parentNode) && el.nodeType === 1) {
    if (el.tagName.toLowerCase() === tagName && (!pattern || pattern.test(el.className))) {
      return el;
    }
  }
  return;
}

function isPopUp() {
  var arg = getArguments();
  if (arg['InPopUp'] == 1) {
    return true;
  } else {
   return false;
  }
}

function getObjPos(obj, relToElementId){
  var x = 0;
  var y = 0;
  var o = obj;
  while( !isNull(o) ){
    if(!isNull(o.id) && !isNull(relToElementId) && o.id != '' && o.id == relToElementId) {
      break;
    }
    var _x = 0;
    var _y = 0;
    var _x2 = 0;
    var _y2 = 0;
    var br = false;
    if(!isNull(o.style)&& $(o).css('position')=='fixed'){
      if(o.style.pixelTop){
        _x = o.style.pixelLeft;
        _y = o.style.pixelTop;
      }else if(o.style.top){
        _x = parseInt(o.style.left);
        _y = parseInt(o.style.top);
      }
      br = true;
    }else{
      _x = o.offsetLeft;
      _y = o.offsetTop;
      if(o.scrollLeft){_x2 = -o.scrollLeft;}
      if(o.scrollTop){_y2 = -o.scrollTop;}
    }

    if(_x)x+=_x;
    if(_x2)x+=_x2;
    if(_y)y+=_y;
    if(_y2)y+=_y2;

    if(br){
      break;
    }
    try {
      if(o==o.offsetParent){
        break;
      }
      o = o.offsetParent;
    } catch (e) { o = null; }
  }
  

  var pos = new Object();
  pos.x = x;
  pos.y = y;
  return pos;
}

function getObjScreenPos(obj){ // returns x,y of obj position on the screen
  var pos = getObjPos(obj);
  if(window.screenLeft)pos.x += window.screenLeft;
  if(window.screenTop )pos.y += window.screenTop;
  return pos;
}

// returnes x,y relative to obj position on the screen, but not off the screen
function getScreenPosRelToObj(_robj,_width,_height, _right, _bottom){
  var pos = getObjScreenPos(_robj);
  if(pos.x < window.screen.availLeft){ pos.x=window.screen.availLeft; }
  if(pos.y < window.screen.availTop ){ pos.y=window.screen.availTop; }

  if(_right==true){ pos.x = pos.x + _robj.offsetWidth; }
  if(_bottom==true){ pos.y = pos.y + _robj.offsetHeight; }

  var maxX = window.screen.availWidth-_width-10;
  if(pos.x>maxX)pos.x=maxX;
  var maxY = window.screen.availHeight-_height-30;
  if(pos.y>maxY)pos.y=maxY;

  return pos;
}

function dateToStr(date){
    var str = "";
    if(isNull(date) || isNaN(date.getTime()) ){
      str = "N/A";
    }else{
      if((date.getMonth()+1)<10)str += "0";
      str += date.getMonth()+1;
      str += "/";
      if(date.getDate()<10)str += "0";
      str += date.getDate();
      str += "/";
      str += date.getFullYear();
    }
    return str;
}

function _dbg(o){
  window.DBGOBJ = o;
  window.open('/ta/js/_dbg.html?dbg=window.opener.DBGOBJ','_blank','',false);return;
}
function _dbgObj(_o){
  var sb = "";
  for(i in _o){sb = sb + i + " = " + _o[i] + "\n";}
  return sb;
}

// returnes true if there is a value enetered in form field

function getValue2(comp){
    if (comp==null || comp==this._undef) return null;
    if (comp.type == "checkbox") {
      if (comp.checked)
        return comp.value;
      return null;
    }
    return getValue(comp);
}

function getValue(comp){
    if (comp==null || comp==this._undef) return null;
    if (comp.getAttribute && comp.getAttribute('selectedValue')!=null) {
      return comp.getAttribute('selectedValue');
    }
    if ((comp.type == "text") ||
        (comp.type == "textarea") ||
        (comp.type == "file") ||
        (comp.type == "hidden") ) {
        return comp.value;
    } else if (comp.type == "select-multiple") {
        return comp.value;
    } else if (comp.type == "select-one") {
      var index = comp.selectedIndex;
      if( index >= 0){
        return isBlank(comp.options[index].value)?comp.options[index].text:comp.options[index].value;
      }
    } else if (comp.type == "checkbox") {
      if (comp.checked)
        return "1";
      return "0";
    } else if (comp.type == "radio" && comp.checked) {
      return comp.value;
    } else if (comp.length > 0) {
      for(var i=0; i< comp.length; i++){
        if (comp[i].type=="radio" && comp[i].checked) {
          return comp[i].value;
        }
      }
    }
    return "";
}


function getOptionText(list,key){
  for(j=0; j< list.length; j++){
    if(list[j].value == key){
      return list[j].text;
    }
  }
  return null;
}

function initComponent(component, value){
  if(isNull(component) || typeof(component)!="object"){return};
  if(component.type == "select-multiple"){
    return;
  }
  if(component.type == "select-one"){
    component.value=value;
    if(isBlank(component.value)){
      var index=-1;
      for(var i=0; i< component.options.length; i++){
        if(component.options[i].value == value){
          index=i;
          break;
        }
      }
      component.selectedIndex = index;
    }
  }else if(component.type == "checkbox"){
    component.checked = (value == component.value);
  }else {
    component.value = value;
  }
}


function clearComponent(comp){
  if( isNull(comp) || isBlank(comp.type) ){return;};
  if(comp.type=="button"){ return; }
  if(comp.type == "select-multiple"){
    for(var i = 0; i< comp.options.length; i++){
      comp.options[i].selected = false;
    }
  }else if(comp.type == "select-one"){
      comp.value='';
      comp.selectedIndex = -1;
      var $wrapper = $(comp).parent();
      if ($wrapper.length == 1 && $wrapper[0].id) {
        dropdown({select_wrapper_id: $wrapper[0].id, select_class_name: comp.className});
      }
  }else if(comp.type == "checkbox"){
    comp.checked = false;
  }else {
    comp.value = '';
  }
}

function checkSelectBoxes(prefix,_form,_startWith,_doCheck,_doOnClick) {
  var checkedVal = event.srcElement.checked;
  if(_doCheck==true || _doCheck==false)checkedVal=_doCheck;
  if(_form){
    if(_startWith){
      for (var i=0;i< _form.elements.length;i++) {
        var c = _form.elements[i];
        if (c.name.indexOf(prefix)==0) {
          c.checked = checkedVal;
          if (c.disabled) c.checked=false;
          if (_doOnClick)c.onclick();
        }
      }
    }else{
      var elems = _form.elements[prefix];
      if(elems != null && elems.length){
        for (var i=0;i< elems.length;i++) {
          var c = elems[i];
          if (c.name==prefix){
            c.checked = checkedVal;
            if (c.disabled) c.checked=false;
            if (_doOnClick)c.onclick();
          }
        }
      } else if (elems != null) {
        elems.checked = checkedVal;
        if (elems.disabled) elems.checked=false;
        if (_doOnClick)elems.onclick();
      }
    }
  }else{
    for (var elemIndex = 0; elemIndex < TheForm.elements.length; elemIndex++) {
      if (prefix.startsWith(prefix)) {
        var element = TheForm.elements[elemIndex];
        element.checked = checkedVal;
        if (element.disabled) element.checked=false;
        if (_doOnClick)element.onclick();
      }
    }
  }
}


function checkMultiSelectBoxes(name, value, form, attr, doCheck) {
  form = form || TheForm;
  attr = attr || "value";
  var checkedVal = doCheck != null ? doCheck : event.srcElement.checked;
  var elems = name ? form.elements[name] : form.elements;
  if (!elems) {
    return;
  }
  if (!elems.length) {
    elems = [elems]; //convert to array
  }
  for (var i = 0; i < elems.length; i++) {
    var c = elems[i];
    if (c.getAttribute(attr) == value){
      c.checked = checkedVal;
    }
  }
}

function uncheckAllOnDeselectBox(checkAllInputName, form) {
  var form = form || TheForm;
  var checkAll = form[checkAllInputName];

  var target = event.target || event.srcElement;
  var checkedVal = target.checked;

  if (!checkedVal) {
    checkAll.checked = checkedVal;
  }
}

function updateSelectAllCheckboxState(form, checkboxName) {
  var spacom = window.spacom;
  if(spacom && spacom.isFormActive()) {
    var isChecked = spacom.getSelectAllCheckboxState();
    var checkbox = form[checkboxName];
    if(!checkbox) {
      checkbox = document.createElement("input");
      checkbox.type = "checkbox";
      checkbox.name = checkboxName;
      checkbox.style.display = "none";
      checkbox.value = 1;
      form.appendChild(checkbox);
    }
    checkbox.checked = isChecked;
  }
}

function getActiveFrame() {
  if (window.isEmbedAdmin) {
    return getFrameByName('ADMIN_CENTER')
  }

  return window.top.centerFrameset.getActiveFrame()
}

window.centerFrameset = {
  activeFrameName: 'ADMIN_CENTER',
  setActiveFrame: function (value) {
    if (this.activeFrameName === value) {
      return
    }

    this.unloadActiveFrame()
    this.activeFrameName = value
    this.updateRows()
  },
  getActiveFrame: function() {
    return getFrameByName(this.activeFrameName)
  },
  getFrameset: function() {
    return isIE() ? window.top.WEBAPPS_FRMSET : findFramesetById('WEBAPPS_FRMSET')
  },
  reset: function(headSize) {
    var frameset = this.getFrameset()
    if (!frameset) {
      return
    }
    var rows = headSize + ',0,100%,0';
    if (this.activeFrameName === 'HCM_CENTER') {
      rows = headSize + ',0,0,0,100%';
    }
    frameset.rows = rows
  },
  updateRows: function() {
    var frameset = this.getFrameset()
    if (!frameset) {
      return
    }
    var rows = frameset.rows.split(',')
    if (this.activeFrameName === 'ADMIN_CENTER') {
      rows[2] = '100%'
      frameset.rows = rows.slice(0, 4).join()
    } else if (this.activeFrameName === 'HCM_CENTER') {
      rows[2] = '0'
      frameset.rows = rows.slice(0, 4).join() + ',100%'
    }
  },
  unloadActiveFrame: function() {
    var activeFrame = this.getActiveFrame();
    activeFrame.hidePopUp()
    activeFrame.hideConfirmDialog()
  }
}

function collectSelectedBoxes(prefix, sep,_form) {
  var spacom = window.spacom;
  if(spacom && spacom.isFormActive()) {
    return spacom.collectSelectedBoxes(prefix, sep);
  }

  var ret = new Array();

  if(_form){
    var elems = _form.elements[prefix];
    if(elems != null && elems.length){
      for (var i=0;i< elems.length;i++) {
        if(elems[i].checked){
          ret[ret.length] = elems[i].value;
        }
      }
    }else if(elems != null) {
      if(elems.checked){ret[ret.length] = elems.value};
    }
  }else{
    for (var i = 0; i< TheForm.elements.length; i++) {
      var nm = TheForm.elements[i].name;
      if (!isNull(nm) && nm.indexOf(prefix) == 0) {
        if (TheForm.elements[i].checked) {
          ret[ret.length] = TheForm.elements[i].name.substring(prefix.length);
        }
      }
    }
  }
  if (isNull(sep))
    sep = "|";

  return ret.join(sep);
}

function sendMessageToParent(data) {
  if (typeof data === 'string') {
    var dataObj = JSON.parse(data)
    if (!dataObj.senders) {
        dataObj.senders = []
    }
    dataObj.senders.unshift(window.frameElement.src)
    data = JSON.stringify(dataObj)
  }
  window.parent.postMessage(data, '*')
}

function resolveActiveHcmFrame() {
  var activeFrame = window.name === 'HCM_CENTER' ? getFrameByName('ADMIN_CENTER') : window
  if (!activeFrame) {
    console.error('[resolveActiveHcmFrame] activeFrame is absent.')
  }
  return activeFrame
}

function SPACommunicator() {
    var that = this,
        caches = {};

    this.isFormActive = function () {
        var center = _getFrameByName('SPA_CENTER');
        if (!center) {
            return false;
        }

        if(!center.__chanel) {
            return false;
        }

        return true;
    };

    this.isFormNotActive = function () { return !that.isFormActive(); };

    this.sendMessage = function (msgId, msgData) {
        if (that.isFormNotActive()) {
            return;
        }

        var center = _getFrameByName('SPA_CENTER')
        return center.__chanel.post(msgId, msgData)
    }

    this.getSelectAllCheckboxState = function() {
        if (that.isFormNotActive()) {
            return undefined;
        }
        var data = that.sendMessage('MSG_COLLECT_SELECTED_BOXES');
        return data ? data.isAllPagesSelected : undefined;
    }

    this.collectSelectedBoxes = function (prefix, sep) {
        if (that.isFormNotActive()) {
            return "";
        }

        var data = that.sendMessage('MSG_COLLECT_SELECTED_BOXES', { name: prefix });
        if (!data || !data.selectedRows) {
            return "";
        }

        var values = data
            .selectedRows
            .map(function (item) {
                return item
                    .map(function (cell) {
                        if (cell.name != prefix) {
                            return null;
                        }

                        return cell['value'];
                    })
                    .filter(function (d) {
                        return !!d;
                    });
            })
            .reduce(
                function (acc, result) {
                    if (result.length > 0) {
                        result.forEach(function (ri) {
                            acc.push(ri);
                        });
                    }
                    return acc;
                }, []);

        if (isNull(sep)) {
            sep = "|";
        }
        return values.join(sep);
    }

    this.refreshReport = function () {
        if (that.isFormNotActive()) {
            return;
        }

        that.sendMessage("MSG_REFRESH_REPORT");
    }

    this.cleanAdminMessages = function() {
        if (that.isFormNotActive()) {
            return;
        }

        adminClearPageMessages();
    }

    this.setScreenParam = function(name, value) {
        if (that.isFormNotActive()) {
            return;
        }

        var activeFrame = resolveActiveHcmFrame()

        if (activeFrame && activeFrame.TheForm) {
          if (activeFrame.TheForm[name]) {
            activeFrame.TheForm[name].value = value;
          } else {
            var paramInput = document.createElement('input');
            paramInput.setAttribute('type', 'hidden');
            paramInput.setAttribute('name', name);
            paramInput.setAttribute('value', value);
            activeFrame.TheForm.appendChild(paramInput);
          }
        }
    }

    this.getScreenParam = function(name) {
      if (that.isFormNotActive()) {
        return undefined;
      }

      var activeFrame = resolveActiveHcmFrame()
      if (activeFrame && activeFrame.TheForm && activeFrame.TheForm[name]) {
        return activeFrame.TheForm[name].value;
      }

      return undefined;
    }

    this.deleteScreenParam = function(name) {
      if (that.isFormNotActive()) {
        return;
      }

      var activeFrame = resolveActiveHcmFrame()
      if (activeFrame) {
        var element = activeFrame.TheForm[name]
        if (element) {
          element.parentElement.removeChild(element)
        }
      }
    }

    this.updateMailboxCounter = function(counter) {
        updateMercuryMailbox(counter)
    }

    this.updateAIMEEMailboxCounter = function(counter) {
        updateAIMEEMailbox(counter)
    }

    this.updateEmployeePhoto = function() {
        updateHeaderPhoto()
    }

    this.showPopUp = function(params) {
        window.showPopUp && window.showPopUp(params)
    }

    this.getBlendedLink = function (targetUrl, screenId, pageTitle, domainTitle, windowId, params, classicContainer) {
      var lnk = getLink('zeyt.ui.UiControl_BlendedPage', windowId);
      var prms = ''
      if (targetUrl) {
        prms += '&targetUrl=' + escapeStr(targetUrl);
      }
      if (screenId) {
        prms += '&screenId=' + escapeStr(screenId);
      }
      if (pageTitle) {
        prms += '&pageTitle=' + escapeStr(pageTitle);
      }
      if (domainTitle) {
        prms += '&@domainTitle=' + escapeStr(domainTitle);
      }
      if (params) {
        prms += '&spaPrms=' + a2hex(getPrms(params));
      }
      if (classicContainer) {
        prms += '&classicContainer=' + classicContainer;
      }

      lnk += '&@prms=' + a2hex(prms);
      return lnk;
    }

    this.getUiControlLink = function (impl, windowId, params) {
      var lnk = getLink(impl, windowId);
      lnk += '&@prms=' + a2hex(getPrms(params));

      return lnk;
    }

    this.getActionLink = function (action, windowId) {
        var indexOfJsp = action.indexOf(".jsp");
        if (indexOfJsp == -1) {
            return null;
        }

        var url = window.location.pathname;
        url += '?sft=' + escapeStr(parseQueryString('sft'));
        url += '&@windowId=' + escapeStr(windowId);

        url += '&ActiveSessionId=' + escapeStr(parseQueryString('ActiveSessionId'));

        action = action.substring(0, indexOfJsp);

        var lastIndexOfSlash = action.lastIndexOf('/', indexOfJsp);
        if (lastIndexOfSlash == -1) {
            return url + '&@page=&@subPage=' + action;
        }

        var page = action.substring(0, lastIndexOfSlash);
        var subPage = action.substring(lastIndexOfSlash + 1);

        return url + '&@page=' + page +'&@subPage=' + subPage;
    }

    this.showPanel = function(windowId, launchPoint, triggerId) {
      var url = '#supportPanelHcm?launchPoint=' + launchPoint + '&triggerId=' + triggerId
      var link = getEmbedLink(url, windowId)
      showPanel(link, launchPoint, triggerId)
    }

    this.closePanel = function() {
      var mainFrameset = window.top.MAIN_FRMSET;
      if (mainFrameset && mainFrameset.cols) {
        var mainFramesetCols = mainFrameset.cols.split(',');
        var cols = mainFramesetCols[0] + ', *';
        mainFrameset.cols = cols;
      }
      return;
    }

    this.closeGlobalMessage = function(globalMessage) {
      var personalExperience = findFramesetById('PERSONAL_EXPERIENCE_PANEL')
      if (!personalExperience) {
        return
      }

      that.sendMessage('MSG_LOAD_NAVIGATION')
      that.sendMessage('MSG_HCM_CLOSE_GLOBAL_MESSAGE', { globalMessage: globalMessage })
      personalExperience.contentWindow.__chanel.post('MSG_HCM_CLOSE_GLOBAL_MESSAGE', { globalMessage: globalMessage })
    }

    this.allEventsSeen = function() {
      var menuWindow = window.parent.frames.ADMIN_MENU
      if (!menuWindow) {
        return
      }
      var pxpQuestion = menuWindow.document.getElementById('icon-pxp-question-circle')
      if (!pxpQuestion) {
        return
      }
      pxpQuestion.classList.remove('m-notice')
      pxpQuestion.classList.remove('m-warning-notice')
    }

    this.setIsAgentChatAvailable = function(available) {
      var menuWindow = window.parent.frames.ADMIN_MENU
      if (!menuWindow) {
        return
      }
      var pxpIconChatButton = menuWindow.document.getElementById('icon_chat_button')
      if (!pxpIconChatButton) {
        return
      }
      if (available) {
        pxpIconChatButton.classList.add('m-success-notice')
      } else {
        pxpIconChatButton.classList.remove('m-success-notice')
      }
    }

    this.openLinkInCurrentWindow = function(link) {
      window.parent.location.href = link
    }

    function getLink(impl, windowId) {
      var url = window.location.pathname;
      url += '?sft=' + escapeStr(parseQueryString('sft'));
      url += '&ActiveSessionId=' + escapeStr(parseQueryString('ActiveSessionId'));
      url += '&@windowId=' + escapeStr(windowId);
      url += '&@impl=' + escapeStr(impl);

      return url;
    }

    function getEmbedLink(link, windowId) {
      var url = window.location.pathname.replace('.hcm', '.embed');
      url += '?sft=' + escapeStr(parseQueryString('sft'));
      url += '&ActiveSessionId=' + escapeStr(parseQueryString('ActiveSessionId'));
      url += '&@windowId=' + escapeStr(windowId);
      url += link;

      return url;
    }

    function getPrms(params) {
      var prms = '';
      if (params) {
        var pairs = [];
        for (var prop in params) {
          if (params.hasOwnProperty(prop)) {
            pairs.push(prop + "=" + escapeStr(params[prop]));
          }
        }
        prms = pairs.join('&');
      }
      return prms;
    }

    function a2hex(str) {
      var hex = '';
      for (var i = 0; i < str.length; i++) {
        hex += str.charCodeAt(i).toString(16);
      }
      return hex;
    }

    function parseQueryString(qParam) {
      var query = window.location.search.substring(1);
      var vars = query.split('&');
      for (var i = 0; i < vars.length; i++) {
        var pair = vars[i].split('=');
        if (decodeURIComponent(pair[0]) == qParam) {
          return decodeURIComponent(pair[1]);
        }
      }
    }

    this.startChat = function() {
      sendPersonalExperiencePanelMessage()
    }

    this.setPreloadedData = function(name, value) {
        // store all caches in the global header
       caches[name] = value;
    }

  this.cleanActionParameters = function () {
    var activeFrame =
            window.name === "HCM_CENTER" ? getFrameByName("ADMIN_CENTER") : window;

    var actionParameters = [
      "z2QRM",
      "z2R5U",
      "z2RCY",
      "z97UQ",
      "z2QYQ",
      "z981U",
      "z988Y",
      "z98G2",
      "z98N6"
    ];

    var length = actionParameters.length
    for (var i = 0; i < length; i++) {
      var selector = "[name='" + actionParameters[i] + "']"
      $(selector, activeFrame.document).remove()
    }
  }
}

window.spacom = new SPACommunicator();

function getFieldValues(fldName, sep) {
  var ret = new Array();
  var elems = TheForm.elements[fldName];
  if(elems != null && elems.length){
    for (var i=0;i< elems.length;i++) {
      var v = getValue2(elems[i]);
      if(!isBlank(v)){
        ret[ret.length] = v;
      }
    }
  }else if(elems != null) {
    var v = getValue2(elems);
    if(!isBlank(v)){
      ret[ret.length] = v;
    }
  }
  if (isNull(sep)){
    sep = "|";
  }
  return ret.join(sep);
}

function openWindow(url,target,w,h,bPop,bScroll,bResize) {
  var desc = new Object;
  desc.url = url;
  desc.width=800;
  if (!isNull(w))
    desc.width=w;
  desc.height=600;
  if (!isNull(h))
    desc.height=h;
  desc.scrollbars = bScroll;
  desc.resizable = bResize;
  if (!isNull(target)) {
    desc.target = target;
  } else {
    desc.target = "_blank";
  }
  if (isNull(bPop) || !bPop) {
    _showWindow(desc);
  } else {
    _showPopupWindow(desc);
  }
}

// allow only one
window._popupWindow = null;

function _closePopupWindow(){
  if(isNull(window._popupWindow))return;
  if(window._popupWindow.closed){
    window._popupWindow =null;
    return;
  }
  //only close if top window
  if(window._popupWindow){
    window._popupWindow.close();
  }
  window._popupWindow = null;
}


function _showPopupWindow(description){
  //_closePopupWindow();
  var _width= isNull(description.width)?100:description.width;
  var _height=isNull(description.height)?100:description.height;
  var _y = 0;
  var _x = 0;
  var winWidth = window.screen.width;
  var winHeight = window.screen.height;

  if(description.center==true){
    _x = (winWidth - _width)/2;
    _y = (winHeight - _height)/4;
  }else if(!isNull(description.relativeToObj)&& !isNull(description.relativeToObj.offsetParent)){
    var _rObj = description.relativeToObj;
    var pos = getScreenPosRelToObj(
      _rObj,_width,_height,
      description.relativeToObjRight==true?true:false,
      description.relativeToObjBottom==true?true:false);
    _x=pos.x;
    _y=pos.y;
  }else{
    _x = isNull(description.x) ? (winWidth - _width)/2 : description.x;
    _y = isNull(description.y) ? (winWidth - _height)/4 : description.y;
  }
  var _winProp = "";

  _winProp += "width=" + Math.floor(_width) + ",height=" + Math.floor(_height);
  _winProp += ",left=" + Math.floor(_x) + ",top=" + Math.floor(_y) ;

  if(description.scrollbars==true)_winProp += ",scrollbars";
  if(description.location  ==true)_winProp += ",location";
  if(description.status    ==true)_winProp += ",status";
  if(description.resizable ==true)_winProp += ",resizable";

  var _winUrl = description.url;
  var _param_count=0;
  var _param = "";
  for(i in description.param){
    _param_count++;
    _param += ( i + "=" + escapeStr(description.param[i]) + "&");
  }

  if(_param_count > 0){
    if (_winUrl.indexOf("?") == -1) {
      _winUrl += "?" + _param;
    } else {
      _winUrl += "&" + _param;
    }
  }

  var _target = description.target;
  return showPopUp({w:Math.floor(_width), h:Math.floor(_height), url:_winUrl, title:description.title, center:description.center});
}

function _showWindow(description){
  //_closePopupWindow();
  var _width= isNull(description.width)?100:description.width;
  var _height=isNull(description.height)?100:description.height;
  var _y = 0;
  var _x = 0;
  var winWidth = window.screen.width;
  var winHeight = window.screen.height;

  if(description.center==true){
    _x = (winWidth - _width)/2;
    _y = (winHeight - _height)/4;
  }else if(!isNull(description.relativeToObj)&& !isNull(description.relativeToObj.offsetParent)){
    var _rObj = description.relativeToObj;
    var pos = getScreenPosRelToObj(
      _rObj,_width,_height,
      description.relativeToObjRight==true?true:false,
      description.relativeToObjBottom==true?true:false);
    _x=pos.x;
    _y=pos.y;
  }else{
    _x = isNull(description.x) ? (winWidth - _width)/2 : description.x;
    _y = isNull(description.y) ? (winWidth - _height)/4 : description.y;
  }
  var _winProp = "";

  _winProp += "width=" + _width + ",height=" + _height;
  _winProp += ",left=" + _x + ",top=" + _y ;

  if(description.scrollbars==true)_winProp += ",scrollbars";
  if(description.location  ==true)_winProp += ",location";
  if(description.status    ==true)_winProp += ",status";
  if(description.resizable ==true)_winProp += ",resizable";

  var _winUrl = description.url;
  var _param_count=0;
  var _param = "";
  for(i in description.param){
    _param_count++;
    _param += ( i + "=" + escapeStr(description.param[i]) + "&");
  }
  if(_param_count>0){
    _winUrl += "?" + _param;
  }

  var _target = description.target;

  _target = _target;

  window._popupWindow1_1 = window.open(_winUrl, _target, _winProp);
  return window._popupWindow1_1;
}

function showCommandDropdown(elem, e) {
  e.stopPropagation();
  e.preventDefault();
  $(elem).toggleClass('active');
  var elem = document.getElementById('extraCommands');
  if (elem.style.display !== 'none') {
        elem.style.display = 'none';
    }
    else {
        elem.style.display = 'block';
    }

}

function hideCommandDropdown(event) {
    if ($(event.target).hasClass("showHidden") || $(event.target).closest('#extraCommands').length > 0) {
        return false
    } else {
        var doc = (((parent || {}).frames || {}).ADMIN_CENTER || {}).document;
        var docSplit = (((parent || {}).frames || {}).ADMIN_LEFT || {}).document;
        var elem = null
        if (doc && doc.getElementById) {
            elem = doc.getElementById('extraCommands');
        } else if (docSplit && docSplit.getElementById) {
            elem = docSplit.getElementById('extraCommands');
        }
        if (elem) {
            elem.style.display='none';
        }
        if (doc || docSplit) {
            $('.showHidden').removeClass('active');
        }
    }
}

function openEventNotificationWindow(eventDescription) {
  var screenX = (screen.width/2)-200;
  var screenY = (screen.height/2)-150;

  var notifWindow = window.open('','Event_Notification','status=0,scrolling=0,resizable=0,width=400,height=200, top='+screenY+', left='+screenX);

  notifWindow.document.write("<head><title>Calendar Event Notification</title></head>");
  notifWindow.document.write("<div align=center style='top:0px;overflow:auto;width:390px;height:160px;'>" + eventDescription);
  notifWindow.document.write("</div><input style='bottom:10px;left:45%;position:absolute;' type=button value=' OK ' name='notifOk' onClick='window.close()'>");
  notifWindow.focus();
}

/***********************************************************************>
 * Lookup Related Functions
 **********************************************************************/


function addSelectValue(_field,_value,_id){
  var _options = _field.options;
  var _l = _options.length;
  for(var i=0; i< _l; i++){
    if(_options[i].value==_id){
      _options[i].selected = true;
      return true;
    }
  }
  _options[_l] = new Option(_id,_value);
  _options[_l].selected = true;
}

function setFieldValue(_field, _value){
  if(isBlank(_value)) {
    _value = "";
  }
  if(isNull(_field))return;
  _field.value = _value;
}

function appendFieldValue(field, value){
  if(isBlank(value))return;
  if(isNull(field))return;
  if(!isBlank(field.value)){
    var values = field.value.split(/\s*,\s*/);
  for(var i=0; i< values.length; i++){
    if(values[i] == value)return;
  }
  values[values.length] = value;
  values.sort();
    field.value = values.join(", ");
  } else {
    field.value = value;
  }
}


function setNoteLinkId(_value) {
  var _oldVal = this.value;
  if (_value == -1) {
    setFieldValue(this,"");
  } else {
    setFieldValue(this,_value);
  }
  if(_oldVal!=_value){
    _onchange(this);
  }

    var imgBtnName = ''+this.attributes['lookupButton'].value;
    var imgBtn = getDocElm(imgBtnName);
    if(imgBtn){
      var blankImgName = ''+this.attributes['blankImg'].value;
      var existsImgName = ''+this.attributes['existsImg'].value;
      imgBtn.getElementsByTagName("div")[0].className = (_value==-1?blankImgName:existsImgName);
    }
}

function genRandom(len) {
 var ret = '';
 for (var i = 0; i < len; i++) {ret += parseInt(Math.random()*10);}
 return ret;
}

function addOnChangeToForm(_form) {
  for (var i = 0; i < _form.elements.length; i++) {
    var elm = _form.elements[i];
    elm.setAttribute('changeMade','0');
    if (elm.onchange) {
      elm.oldOnChange = elm.onchange;
    }
    elm.onchange = changeMadeWithOldOnChangeHandler.bind(elm);
  }

  function changeMadeWithOldOnChangeHandler() {
    this.setAttribute('changeMade','1');
    if(this.oldOnChange) {
     return this.oldOnChange();
    }
  }
}

function didFormValuesChange(_form) {
  for (var i = 0; i < _form.elements.length; i++) {
    var elm = _form.elements[i];
    if (isBlank(elm.id) && isBlank(elm.name)){
      continue;
    }
    if (elm.getAttribute('changeMade')=='1') {
      if (isNull(elm.getAttribute('chkChng')) || elm.getAttribute('chkChng')!=0) {
        return true;
      }
    }
  }
  return false;
}

function isUserLoggedOut() {
  var actionWindow = getTopWindow(true);
  if (actionWindow.UserLogout) {
    return true;
  }
  return false;
}

function _getAlertChangesText(){
  var ___div = "\n_______________________________________________________           ";
  var ___pre = "";
  var ___post = "";
  return  ___pre + ___div + "\n\n\n         C h a n g e s    h a v e    N O T    b e e n    s a v e d   \n" + ___div + ___post;
}

var alertText = _getAlertChangesText();

alertText='_______________________________________________________                 \x0D\n\x0D\n\x0D\n         C h a n g e s    h a v e    N O T    b e e n    s a v e d    \x0D\n\x0D\n_______________________________________________________                 ';

function getAlertChangesText(addWarn){
  if (addWarn) {
    return "Are you sure you want to navigate away from this page?\n\n" +
           alertText + "\n\nPress OK to continue, or Cancel to stay on the current page.";
  }
  return alertText;
}

function fn_top_menu_getFirstMenuNum(){
  return 1;
}
function fn_top_menu_getLastMenuNum(){
  var _menuWindow = window.parent.frames.ADMIN_MENU;
  var i=-1;
  for(var iMenu=1; iMenu<50; iMenu++){
    var el = _menuWindow.getDocElm('TopMenu_HM_Menu' + iMenu);
    if(el==null)break;
    i = iMenu;
  }
  return i;
}
function fn_top_menu_popDownAll(m){
  var _menuWindow = window.parent.frames.ADMIN_MENU;
  for(var iMenu=1; iMenu<50; iMenu++){
    var el = _menuWindow.getDocElm('TopMenu_HM_Menu' + iMenu);
    if(el==null)break;
    if(el==m)continue;
    _menuWindow.popDown('HM_Menu'+iMenu,el);
  }
}
function fn_top_menu_Cancel(){
  var _menuWindow = window.parent.frames.ADMIN_MENU;
  fn_top_menu_popDownAll(null);
  _menuWindow.hideMenuFrame();
}
function fn_top_menu_item_onkeydown(m,ev){
   if(!m)m = this;
   if(!ev)ev = event;

  if(ev.keyCode==13 || ev.keyCode==40){
    fn_top_menu_popDownAll(null);
    
    var cMenu = $(window.parent.frames.getFrameByName('ADMIN_MENU_BODY').document).find(".activeMenuBlock");
    cMenu[0].focus();

    var itemLink = cMenu.find(".itemLink.hoveredItem");

    if (itemLink.length) {
      ev.preventDefault();
      ev.stopPropagation();
      itemLink[0].click(ev);
    } else {
      cMenu[0].firstChild.click();
    }
  }else if(ev.keyCode>=65 && ev.keyCode<=90){
    fn_top_menu_popDownAll(null);
    var _c = String.fromCharCode(ev.keyCode);
    var cMenu = parent.frames.ADMIN_MENU_BODY.HM_CurrentMenu;
    cMenu.focus();
    fn_current_menu_mnemonic(cMenu,_c);
  }else if(ev.keyCode==37){
    var menuNum = parseInt(m.menuNum)-1;
    fn_selectNMenu(ev,menuNum);
  }else if(ev.keyCode==39){
    var menuNum = parseInt(m.menuNum)+1;
    fn_selectNMenu(ev,menuNum);
  }else if(ev.keyCode>=49 && ev.keyCode<=57){
    
      if(!ev.altKey){
        var _i = ev.keyCode-49;
        fn_selectNMenu(ev,_i+1);
      }
    
  }else if(ev.keyCode==27){
    fn_top_menu_Cancel();
  }else{
  }
}
function fn_current_menu_mnemonic(m,_c){
  var _loop = true;
  var nextItem = m.currentItem && m.currentItem.nextSibling ? m.currentItem.nextSibling : m.firstChild;
  while(nextItem!=null){
    if(nextItem.mnemonic==_c){
      nextItem.onmouseover();
      return;
    }
    nextItem = nextItem.nextSibling;
    if(nextItem==null && _loop){
      _loop = false;
      nextItem = m.firstChild;
    }
  }
}
function fn_top_onkeydown(ev){

  if(!ev)ev = event;
  if(ev.altKey){
    if(ev.keyCode>=49 && ev.keyCode<=57){
      
        var _i = ev.keyCode-49;
        fn_selectNMenu(ev,_i+1);
      
    }else if(ev.keyCode>=65 && ev.keyCode<=90){
      var _c = String.fromCharCode(ev.keyCode);
      var _win_ADMIN_MENU = parent.frames.ADMIN_MENU;
      for(var iMenu=1; iMenu<50; iMenu++){
        var el = _win_ADMIN_MENU.getDocElm('TopMenu_HM_Menu' + iMenu);
        if(el==null)break;
        if(el.mnemonic==_c){
          fn_top_menu_popDownAll(el);
          _win_ADMIN_MENU.popUp('HM_Menu'+iMenu,ev, 1);
          el.focus();
          ev.cancelBubble=true;
          break;
        }
      }
    }
  }
}
function fn_selectNextMenu(e,_m){
  var menuNum = _m.id.substring(7).split('_')[0];
  menuNum = parseInt(menuNum)+1;
  fn_selectNMenu(e,menuNum);
}
function fn_selectPrevMenu(e,_m){
  var menuNum = _m.id.substring(7).split('_')[0];
  menuNum = parseInt(menuNum)-1;
  fn_selectNMenu(e,menuNum);
}
function fn_selectNMenu(ev,menuNum){
  var _win_ADMIN_MENU = parent.frames.ADMIN_MENU;
  var el=_win_ADMIN_MENU.getDocElm('TopMenu_HM_Menu' + menuNum);
  if(el==null){
    if(menuNum<_win_ADMIN_MENU.fn_top_menu_getFirstMenuNum())menuNum=_win_ADMIN_MENU.fn_top_menu_getLastMenuNum();
    if(menuNum>_win_ADMIN_MENU.fn_top_menu_getLastMenuNum())menuNum=_win_ADMIN_MENU.fn_top_menu_getFirstMenuNum();
    el=_win_ADMIN_MENU.getDocElm('TopMenu_HM_Menu'+menuNum);
  }
  if(el!=null){
    _win_ADMIN_MENU.fn_top_menu_popDownAll(null);
    _win_ADMIN_MENU.popUp('HM_Menu'+(menuNum),ev,1);
    el.focus();
  }
}
function setFocusToMainWindow(){
  var f = parent.frames.ADMIN_CENTER;
  if(f && f.document && f.document.body && f==window.self){
    if(f.document.focus)f.document.focus();
    else if(f.document.body.focus)f.document.body.focus();
  }
}

function setFocusToElement(elName){
  var frm = document.forms[0];
  var el = frm.elements[elName];
  if(el && 'length' in el){
    el = el[0];
  }
  if(el){
    try{el.select();}catch(e) {}
    try{el.focus();}catch(e) {}
  }
}

////AJAX

function getXmlHttp(){
 var xmlhttp=false;
 /*@cc_on @*/
 /*@if (@_jscript_version >= 5)
  try {xmlhttp = new ActiveXObject('Msxml2.XMLHTTP');
  } catch (e) {
   try {
    xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
   } catch (E) {
    xmlhttp = false;
   }
  }
 @end @*/
 if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
   try {
     xmlhttp = new XMLHttpRequest();
   } catch (e) {
     xmlhttp=false;
   }
 }
 if (!xmlhttp && window.createRequest) {
   try {
     xmlhttp = window.createRequest();
   } catch (e) {
     xmlhttp=false;
   }
 }
 return xmlhttp;
}

function buildPOST(frm, excludeEmpty) {
  var f = frm?frm:document.forms['TheForm'];
  if(f==null)return '';
  var qs = '';
  for (var i=0;i< f.elements.length;i++) {
  var elem = f.elements[i];
    if (elem.name!='') {
      if ((!elem.value || elem.value=='') && excludeEmpty) {
        continue;
      }
      if (elem.type == "checkbox" && elem.checked==false) {
        continue;
      }
      if (elem.type == "radio" && elem.checked==false) {
        continue;
      }
      var name = escapeStr(elem.name);
      if (elem.type == "select-multiple") {
        for (var iOption = 0; iOption < elem.options.length; iOption++) {
          if (elem.options[iOption].selected) {
            qs+=(qs=='')?'':'&';
            qs+= name+'='+escapeStr(elem.options[iOption].value);
          }
        }
      } else {
        qs+=(qs=='')?'':'&';
        qs+= name+'='+escapeStr(elem.value);
      }
    }
   }
   return qs;
}


function doAjaxAction(p){
 if (typeof TheFormIsLoaded != 'undefined' && TheFormIsLoaded==1){
   addOnLoad(function(){
     doAjaxAction(p);
   });
   return;
 }
 var xmlHttp = getXmlHttp();
 var r=(new Date()).getTime()*Math.random();
 var frm = document.forms['TheForm'];
 var url = p.url ? p.url : frm.action;
 url += ((url.charAt(url.length-1)=='?'||url.charAt(url.length-1)=='&')?'':(url.indexOf('?')>-1)?'&':'?');
 url += '@AJAX='+p.action;
 xmlHttp.open('POST',url,true);
 if (!isNull(p.callback)) {
   xmlHttp.onreadystatechange=p.callback;
 }
 window.currentXmlHttp = xmlHttp;
 var postData = buildPOST(frm);
 xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
 xmlHttp.send(postData);
}

function disableEvent(e,_type){
  if (!e) var e = window.event;
  if(_type && e.type!=_type){
    return true;
  }
  e.cancelBubble = true;
  if (e.stopPropagation) e.stopPropagation();
  if (e.preventDefault) e.preventDefault();
  return false;
}

function setEnabledField(_field,_b){
  if(_field){
    _field.disabled=!_b;
  }
}
function setEnabledRadioField(_field,_value,_b){
  if(_field){
    for(var i=0; i< _field.length; i++){
      if(_field[i].value==_value){
        if(!_b)_field[i].checked=_b;
        _field[i].disabled=!_b;
      }
    }
  }
}

function getFrameByName(_name,_w){
  var w = (_w)?_w:self;
  while(true){
    var _result = _getFrameByName(_name,w);
    if(_result!=null){
       return _result;
     }
    if(w.parent==null || w.parent==w){
      return null;
    }
    w = w.parent;
  }
}
function _getFrameByName(_name,w){
  if(!w)w = self;
  try {
    if(w.name==_name){
      return w;
    }
  } catch(e) {
  }
  for(var i=0; i< w.frames.length; i++){
    var _w  = w.frames[i];
    try {
      if(_w.name==_name){
        return _w;
      }
    } catch(e) {
    }
  }
  for(var i=0; i< w.frames.length; i++){
    var _w  = w.frames[i];
    if(_w==w)continue;
    _w = _getFrameByName(_name,_w);
    if(_w){
      return _w;
    }
  }
  return null;
}


function setCookie( name, value, expires, path, domain, secure )  {
  var today = new Date();
  today.setTime( today.getTime() );
  if ( expires ) {
    expires = expires * 1000 * 60 * 60 * 24;
  }
  var expires_date = new Date( today.getTime() + (expires) );

  document.cookie = name + "=" +escapeStr( value ) +
  ( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
  ( ( path ) ? ";path=" + path : "" ) +
  ( ( domain ) ? ";domain=" + domain : "" ) +
  ( ( secure ) ? ";secure" : "" );
}

function readCookie(name) {
  var nameEQ = name + "=";
  var ca = document.cookie.split(';');

  for(var i=0;i < ca.length;i++) {
    var c = ca[i];
    while (c.charAt(0)==' ') c = c.substring(1,c.length);

    if (c.indexOf(nameEQ) == 0) {
      return c.substring(nameEQ.length,c.length);
    }
  }
  return null;
}

function fldLookupKeyEvent(fld,event){
  if(isKeyboardNav(event)){
    return true;
  }
  if(isInputEvent_DELETE(event)){
    return true;
  }
  if(isInputEvent(event)){
    return false;
  }
  return true;
}

function isInputEvent_DELETE(e){
  if(e.keyCode==46) return true;
  if(e.keyCode==8) return true;
  return false;
}
function isInputEvent(e){
  if(e.keyCode<32) return false;
  if(e.keyCode>126) return false;
  if(e.keyCode>=33 && e.keyCode<=40) return false;
  if(e.altKey) return false;
  if(e.ctrlKey && e.keyCode!=86)return false;
  return true;
}

var numJsToLoad = 0;
function includeJavaScript(scriptFilename, objectName, onLoadJs) {
  if (objectName && window[objectName]) {
    //JS was already loaded
    if (onLoadJs) {
      onLoadJs();
    }
    return false;
  }

  numJsToLoad++;

  var done = function() {
    if (onLoadJs) {
      onLoadJs();
    }
    numJsToLoad--;
  };

  var js = document.createElement('script');
  if (js.addEventListener) {
    js.addEventListener("load", done, false);
  } else {
    js.onreadystatechange = function() {
      if (this.readyState == "loaded" || this.readyState == "complete") {
        done();
      }
    };
  }
  js.setAttribute('type', 'text/javascript');
  js.setAttribute('src', scriptFilename);
  document.getElementsByTagName('body')[0].appendChild(js);
  return false;
}

function includeCSS(cssFilename) {
  var css = document.createElement('link');
  css.setAttribute('rel', 'stylesheet');
  css.setAttribute('type', 'text/css');
  css.setAttribute('href', cssFilename);
  document.body.appendChild(css);
  return false;
}

////////////////// TimeZone //////////////////////////////
function TimezoneDisplay(shortName, javaName, longName, timezoneOffset, dstOffset, displayName) {
  this.shortName = shortName;
  this.javaName = javaName;
  this.javaNameEnc = escapeStr(javaName);
  this.longName = longName;
  this.timezoneOffset = timezoneOffset;
  this.dstOffset = dstOffset;
  this.displayName = displayName;
}

var showedTimeZoneDisplayWarning = false;
var browserTimeZoneDisplay = null;
function getBrowserTimezoneDisplay() {
  if(browserTimeZoneDisplay != null) {
    return browserTimeZoneDisplay;
  }
  var rightNow = new Date();
  var jan1 = new Date(rightNow.getFullYear(), 0, 1, 0, 0, 0, 0);
  var jan1TimeZoneOffset = jan1.getTimezoneOffset()*60000;
  var jul1 = new Date(rightNow.getFullYear(), 6, 1, 0, 0, 0, 0);
  var temp = jan1.toGMTString();
  var date3 = new Date(temp.substring(0, temp.lastIndexOf(" ")-1));
  var temp = jul1.toGMTString();
  var date4 = new Date(temp.substring(0, temp.lastIndexOf(" ")-1));
  var diffStdTime = (jan1 - date3);
  var diffDaylightTime = (jul1 - date4);

  var jul1DSTOffset = diffDaylightTime - diffStdTime;

  var tz =  timeZonesAvailable.getTZByOffsets(jan1TimeZoneOffset, jul1DSTOffset);
  if(tz != null) {
    if(tz.hasDSTMatch) {
      browserTimeZoneDisplay = tz;
      return tz;
    }
  } else {
    return timeZonesAvailable.getTZByShortName('EST');
  }

  var usingStr = '';
  usingStr = '\n\nDefaulting to '+ tz.displayName +'.';

  if(!showedTimeZoneDisplayWarning) {
    showedTimeZoneDisplayWarning = true;
    alert('The timezone of your computer is not supported.  Please verify your system time zone and daylight savings settings.'+usingStr);
  }

  browserTimeZoneDisplay = tz;
  return tz;
}

function TimeZonesAvailable() {

  this.timeZones = new Array();
  this.tzNames = new Array();
  this.tzOffsets = new Array();

  this.timeZones.push( new TimezoneDisplay('EST', 'US/Eastern', 'Eastern Time Zone', 18000000, 3600000, 'US/Eastern') );
  this.tzNames.push('EST');
  this.tzOffsets.push('18000000-3600000');

  this.timeZones.push( new TimezoneDisplay('America/Indianapolis', 'US/East-Indiana', 'East Indiana Time Zone', 18000000, 0, 'US/East-Indiana') );
  this.tzNames.push('America/Indianapolis');
  this.tzOffsets.push('18000000-0');

  this.timeZones.push( new TimezoneDisplay('CST', 'US/Central', 'Central Time Zone', 21600000, 3600000, 'US/Central') );
  this.tzNames.push('CST');
  this.tzOffsets.push('21600000-3600000');

  this.timeZones.push(  new TimezoneDisplay('America/Phoenix', 'US/Arizona', ' Arizona Time Zone', 25200000, 0, 'US/Arizona') );
  this.tzNames.push('America/Phoenix');
  this.tzOffsets.push('25200000-0');

  this.timeZones.push( new TimezoneDisplay('MST', 'US/Mountain', 'Mountain Time Zone', 25200000, 3600000, 'US/Mountain') );
  this.tzNames.push('MST');
  this.tzOffsets.push('25200000-3600000');

  this.timeZones.push( new TimezoneDisplay('PST', 'US/Pacific', 'Pacific Time Zone', 28800000, 3600000, 'US/Pacific') );
  this.tzNames.push('PST');
  this.tzOffsets.push('28800000-3600000');

  this.timeZones.push( new TimezoneDisplay('UTC', 'UTC', 'Universal Time Zone', 0, 0, 'UTC') );
  this.tzNames.push('UTC');
  this.tzOffsets.push('0-0');

  this.timeZones.push( new TimezoneDisplay('AST', 'US/Alaska', 'Alaska Time Zone', 32400000, 3600000, 'US/Alaska') );
  this.tzNames.push('AST');
  this.tzOffsets.push('32400000-3600000');

  this.timeZones.push( new TimezoneDisplay('HST', 'US/Hawaii', 'Hawaii Time Zone', 32400000, 0, 'US/Hawaii') );
  this.tzNames.push('HST');
  this.tzOffsets.push('32400000-0');

  // this has the same offsets as HST
  this.timeZones.push( new TimezoneDisplay('America/Adak', 'America/Adak', 'Alaska Aleutian Time Zone', 36000000, 0, 'America/Adak') );
  this.tzNames.push('America/Adak');
  this.tzOffsets.push('36000000-0');

  this.timeZones.push( new TimezoneDisplay('America/Puerto_Rico', 'America/Puerto_Rico', 'Puerto Rico & Virgin Islands Time Zone', 14400000, 0, 'America/Puerto Rico') );
  this.tzNames.push('America/Puerto_Rico');
  this.tzOffsets.push('14400000-0');
}

TimeZonesAvailable.prototype.getTZByShortName = function (shortName) {
  for(var i=0; i< this.tzNames.length; i++) {
    var el = this.tzNames[i];
    if(el == shortName) {
      var tz = this.timeZones[i];
      return tz;
    }
  }

  return null;

}

TimeZonesAvailable.prototype.getTZByOffsets = function (jan1TimeZoneOffset, jul1DSTOffset) {
  for(var i=0; i< this.tzOffsets.length; i++) {
    var el = this.tzOffsets[i];
    if(el == jan1TimeZoneOffset + '-' + jul1DSTOffset) {
      var tz = this.timeZones[i];
      tz.hasDSTMatch = true;
      return tz;
    }
  }

  for(var i=0; i< this.timeZones.length; i++) {
    var el = this.timeZones[i];
    if(el.timezoneOffset == jan1TimeZoneOffset) {
      el.hasDSTMatch = false;
      return el;
    }
  }

  return null;
}

TimeZonesAvailable.prototype.getDefault = function () {
  return this.timeZones[0];
}

var timeZonesAvailable = new TimeZonesAvailable();




function DEBUG(v){
  var DW = getDocElm('DEBUG');
  if(!DW){
    return;
  }
  DW.parentElement.style.display='block';
  var t = getInnerText(DW);
  while(t.length + v.length > 10000){
    var i = t.indexOf('\n');
    if(i==-1){
      t = '';
    }else{
      t = t.substring(i+1);
    }
  }
  t = t.length==0 ? ' - '+ v : t + '\n - '+ v;
  setInnerText(DW, t);
  DW.scrollTop = 999999;
}

function roundValue(v,numDec){
  if(v==0 || v==null){
    return v;
  }
  if(isNaN(v) || isNaN(numDec)){
    return v;
  }
  if(numDec>10 || numDec<-10){
    return v;
  }
  var prec = numDec==0 ? 1 : Math.pow(10,numDec);
  v = v*prec;
  v = Math.round(v);
  v = v/prec;
  return v;
}


function getValueAsInt(comp,defVal){
  var v = getValue(comp);
  if(isNull(v))return defVal;
  var i = parseInt(v);
  if(isNaN(i))return defVal;
  return i;
}


function onLinkClick(e,l){
  var s = '';
  for(i in e){
    if(i=='boundElements')continue;
    if(i=='srcElement')continue;
    if(e[i]){
      v = ''+e[i];
      s += '@e.' + i + '=' + v + '&';
    }
  }
  l.href = l.href + s;
  return false;
}

function flipVisibility(box, elName, val, negate) {
  var el = getDocElm(elName);
  if (el == null || box == null) return;
  var ok = false;
  if (val == null) {
    ok = box.checked;
  } else if (val instanceof Array) {
    for (var i = 0; i < val.length; i++) {
      if (box.value == val[i]) {
        ok = true;
        break;
      }
    }
  } else {
    ok = box.value == val;
  }
  if (negate) ok = !ok;
  var d = ok ? 'inline' : 'none';
  el.style.display = d;
}

function flipVisibilityMulti(box, elNames, val, negate) {
  elNames.forEach(function(elName) {
    flipVisibility(box, elName, val, negate)
  });
}


jeyt.dom.toggleVisibility = function(box, elName, val, negate) {
  var el = getDocElm(elName);
  if (el == null || box == null) return;
  var ok = false;
  if (val == null) {
    ok = box.checked;
  } else if (val instanceof Array) {
    for (var i = 0; i < val.length; i++) {
      if (box.value == val[i]) {
        ok = true;
        break;
      }
    }
  } else {
    ok = box.value == val;
  }
  if (negate) ok = !ok;
  var d = ok ? '' : 'none';
  el.style.display = d;
};

function parseDate(date, format) {
  if (format == null || format == '') {
    format = "mm/dd/yyyy";
  }

  formatLowerCase = format.toLowerCase();

  var CENTURY_CUTOFF_FOR_2_DIGIT_YEAR = new Date().getFullYear() + 15 - 100;

  var dateRegExp = getDateRegExp(formatLowerCase);

  if (!dateRegExp.test(date)) {
    return null;
  }

  var parts = deleteEmptyValues(date.match(dateRegExp));

  var positions = getPositions(formatLowerCase);

  var year = parseInt(parts[positions.y], 10),
      month = parseInt(parts[positions.m], 10),
      day = parseInt(parts[positions.d], 10);

  if (year < 100)  {
    if (year + 1900 < CENTURY_CUTOFF_FOR_2_DIGIT_YEAR) {
      year += 2000;
    } else {
      year += 1900;
    }
  } else if (year < 1000) {
    year += 2000;
  }

  return new Date(year, month - 1, day);
}

function getDateRegExp(format) {
  var formatWithoutDelimiters = format.replace(/[^ymd]/ig, "");

  var dateRegExpWithDelimiters = formatWithoutDelimiters,
      dateRegExpWithoutDelimiters = formatWithoutDelimiters;

  dateRegExpWithDelimiters = dateRegExpWithDelimiters.replace(/m+/i, "(1[012]|0?[1-9])");
  dateRegExpWithDelimiters = dateRegExpWithDelimiters.replace(/d+/i, "(3[01]|[12][0-9]|0?[1-9])");
  dateRegExpWithDelimiters = dateRegExpWithDelimiters.replace(/y+/i, "(\\d{1,4})");
  dateRegExpWithDelimiters = dateRegExpWithDelimiters.replace(/\)\(/g, ")\\D(");

  dateRegExpWithoutDelimiters = dateRegExpWithoutDelimiters.replace(/m+/i, "(1[012]|0[1-9])");
  dateRegExpWithoutDelimiters = dateRegExpWithoutDelimiters.replace(/d+/i, "(3[01]|[12][0-9]|0[1-9])");
  dateRegExpWithoutDelimiters = dateRegExpWithoutDelimiters.replace(/y+/i, "(\\d{2}|\\d{4})");

  var dateRegExp = "^(?:" + dateRegExpWithoutDelimiters + ")$|^(?:" + dateRegExpWithDelimiters + ")$";

  return new RegExp(dateRegExp);
}

function getPositions(format) {
  var positions = {y: -1, m: -1, d: -1},
      position = 1,
      part;

  for (var i = 0; i < format.length; i++) {
    part = format.charAt(i);

    if (positions[part] === -1) {
      positions[part] = position;
      ++position;
    }
  }

  return positions;
}

function deleteEmptyValues(array) {
  for (var i = 0; i < array.length; i++) {
    if (!array[i]) {
      array.splice(i, 1);
      i--;
    }
  }
    return array;
};

var setLinearGradient = (function() {
  var gradientFuncType = '';

  var types = ['standard', '-moz-', '-webkit-', '-ms-', '-o-'];

  //determine gradient function by testing on a temporary dom object
  var div = document.createElement('div');
  for (var i = 0; i < types.length; i++) {
    try {
      if (types[i] === 'standard') {
        div.style.backgroundImage = 'linear-gradient(to right, #FFFFFF, #FFFFFF)';
      } else {
        div.style.backgroundImage = types[i] + 'linear-gradient(left, #FFFFFF, #FFFFFF)';
      }
      if (div.style.backgroundImage) {
        gradientFuncType = types[i];
        break;
      }
    } catch(e) {}
    div.style.backgroundImage = '';
  }

  if (!gradientFuncType) {
    try {
      div.style.filter = "progid:DXImageTransform.Microsoft.Gradient(startColorStr='#FFFFFF', endColorStr='#FFFFFF', gradientType='1')";
      if (div.style.filter) {
        gradientFuncType = 'msFilter';
      }
    } catch(e) {}
  }

  return function(el, colorFrom, colorTo, gradientType) {
    el.style.backgroundColor = colorTo; //fallback
    if (gradientFuncType === 'msFilter') {
      el.style.filter = "progid:DXImageTransform.Microsoft.Gradient(startColorStr='"+colorFrom+"', endColorStr='"+colorTo+"', gradientType='"+gradientType+"')";
    } else if (gradientFuncType === 'standard') {
      var type = gradientType == 1 ? "to right" : "to bottom";
      el.style.backgroundImage = 'linear-gradient('+type+', '+colorFrom+', '+colorTo+')';
    } else if (gradientFuncType) {
      var type = gradientType == 1 ? "left" : "top";
      el.style.backgroundImage = gradientFuncType + 'linear-gradient('+type+', '+colorFrom+', '+colorTo+')';
    }
  };
})();

/**
 * Deeply clones a node. IE fallback.
 * @param {Node} node A node to clone
 * @return {Node} A clone of the given node and all its children
 */
function cloneNode(node) {
    // If the node is a text node, then re-create it rather than clone it
    var clone = node.nodeType == 3 ? document.createTextNode(node.nodeValue) : node.cloneNode(false);

    // Recurse
    var child = node.firstChild;
    while(child) {
        clone.appendChild(cloneNode(child));
        child = child.nextSibling;
    }

    return clone;
}


/** Reset Button Functions **/
function resetButtonPressed(fieldId, displayId, defaultValue, isResize) {
  var TheForm = document.TheForm;
  var fieldDisp = TheForm[displayId];
  TheForm[fieldId].value="";
  toggleReset(fieldId + "_CLR", fieldId);
  fieldDisp.value=defaultValue;

  if (fieldDisp.onchange) {
    fieldDisp.onchange();
  }

  return false;
}

function resetComboBoxButtonPressed(fieldId, displayId, defaultValue, isResize) {
  var TheForm = document.TheForm;
  var field = TheForm[fieldId];
  var fieldDisp = TheForm[displayId];

  field.value="";
  toggleReset(fieldId + "_CLR", fieldId);
  fieldDisp.value=defaultValue;

  if (field.onchange) {
    field.onchange();
  }

  return false;
}


function toggleReset(id, name) {
  var wrapper = $("#" + id);
  var link = wrapper.find("a");
  var input = TheForm[name];

  if (!input.value) {
    link.hide();
  } else {
    link.show();
  }
}

// Custom file input
function fileInput(id) {
  var wrapper = document.getElementById(id);
  var inputField = wrapper.getElementsByClassName("inputFile")[0];
  var inputFileWrapper = wrapper.getElementsByClassName("inputFileWrapper")[0];
  var inputFileWrapperText = inputFileWrapper.getElementsByClassName("editFormText")[0];
  var standartLabelText = inputFileWrapperText.getAttribute("data-empty-text");

  var oldOnChange = inputField.onchange;

  inputField.onchange = function() {
    var inputFieldText = inputField.value;

    if (inputFieldText.length < 1) {
      inputFileWrapperText.innerHTML = standartLabelText;
    } else {
      if (inputFieldText.match(/fakepath/)) {
        inputFieldText = inputFieldText.replace(/C:\\fakepath\\/i, '');
      }

      inputFileWrapperText.innerHTML = inputFieldText;
    }

    if (oldOnChange) {
      oldOnChange();
    }
  };
}

function togglePasswordVisibility(id) {
  var field = $('#Fld' + id + ' .hasFormBtn.viewablePasswordField');
  var input = $('input[name=' + id + ']', field);
  if (input.attr('type') === 'password') {
    input.attr('type', 'text');
    field.removeClass('maskedPasswordField');
  } else {
    input.attr('type', 'password');
    field.addClass('maskedPasswordField');
  }
}

function auditTogglePassword(id)
{
  var field = $('#Fld' + id + ' .hasFormBtn.viewablePasswordField');
  var input = $('input[name=' + id + ']', field);
  if (input.attr('type') === 'password') {
  	doAjaxAction('AUDIT_SHOW_PASSWORD' , id);
  }
  else {
  	doAjaxAction('AUDIT_HIDE_PASSWORD' , id);
  }
}

function showHamburgerMenu(){

    $('#hamburgNav-show', window.parent.frames['ADMIN_MENU'].document).toggle();
    $('#hamburgNav-hide', window.parent.frames['ADMIN_MENU'].document).toggle();

    setMainFramesetCols('280, *')
}

function togglePin(state) {
      var pinUnpinBtn = document.getElementById('pin-unpin-button')
        var pinBtnState = pinUnpinBtn.getAttribute("pinned")
        if (pinBtnState === 'true') {
          pinUnpinBtn.setAttribute('pinned', 'false')
          pinUnpinBtn.classList.remove('icon-pin')
          pinUnpinBtn.classList.add('icon-unpin')

          HMenu().savePinState(false)
        } else {
          pinUnpinBtn.setAttribute('pinned', 'true')
		  pinUnpinBtn.classList.remove('icon-unpin')
          pinUnpinBtn.classList.add('icon-pin')

          HMenu().savePinState(true)
        }
}

function isMenuPinned(){

    if (!window.parent.frames['HAMBURG_MENU']) return true;

	var pin = $(window.parent.frames['HAMBURG_MENU'].document).find('#pin-unpin-button').attr("pinned")
	if(pin === 'true') {
		return true;
	}
	return false;
}

function resetMenuState() {
	$(window.parent.frames['HAMBURG_MENU'].document).find('#pin-unpin-button').attr('pinned', 'false')
	$(window.parent.frames['HAMBURG_MENU'].document).find('#pin-unpin-button').removeClass('icon-pin')
	$(window.parent.frames['HAMBURG_MENU'].document).find('#pin-unpin-button').addClass('icon-unpin')

    window.parent.frames['HAMBURG_MENU'].HMenu().savePinState(false)
}

function hideHamburgerMenu(value) {

    if (!window.parent.frames['HAMBURG_MENU']) return

    $("#SystemSearchDiv", window.parent.frames['HAMBURG_MENU'].document).hide();

	if(value != true && isMenuPinned()) {
		return;
	}

    if ($('#hamburgNav-show', window.parent.frames['ADMIN_MENU'].document).is(':visible')) {
        // the hamburger menu is already hidden the hamburger icon is visible
        return
    }


    resetMenuState();

	$('#hamburgNav-show', window.parent.frames['ADMIN_MENU'].document).toggle();
    $('#hamburgNav-hide', window.parent.frames['ADMIN_MENU'].document).toggle();

    setMainFramesetCols('0, *')
}

function displaySubMenu(m){
    var container = $('.nav-wrapper')
    var menu = $(m)
    var el = menu.parent().find('ul').first()
    var siblings = menu.parent().siblings()
    var siblingUls = menu.parent().siblings().find('ul')
    var open = menu.hasClass("open")

    siblingUls.removeClass("open").addClass('closed')
    siblings.find('a.open').removeClass("open").addClass('closed')
    el.removeClass("closed").addClass('open')

    if (open) {
        var childUls = menu.parent().find('ul')
        childUls.removeClass("open").addClass('closed')
        menu.parent().find('a.open').removeClass("open").addClass('closed')
    } else  {
        menu.removeClass("closed").addClass("open")
        el[0].scrollIntoView({behavior: "smooth", block: "nearest", inline: "start"});
    }

    menu.parent().find('ul.always-expanded').addClass('open')
}

function onMenuItemOpened(m) {

  hideMenuFrame();
  hideHamburgerMenu();

  var activeFrame = getActiveFrame()
  if(!activeFrame) {
    _onMenuItemOpened(m);
    return;
  }

  var spacom = activeFrame.spacom
  if (spacom && spacom.isFormActive() && m.target == 'ADMIN_CENTER') {
    window.event.preventDefault();
    spacom.sendMessage('MSG_UNLOAD', function() {
      _onMenuItemOpened(m)
      window.open(m.href, m.target);
    });
  } else {
    _onMenuItemOpened(m)
  }
}

function _onMenuItemOpened(m) {

    if(!m.href) {
        return;
    }
    var parts = m.href.split('#')
    if(parts.length != 2) {
        return;
    }

    var windowId = ''
    var domainTitle = ''
    var path = parts[1];

    var qp = parts[0].split('?')[1];
    var qpPairs = qp.split('&');
    for(var i=0;i<qpPairs.length;i++) {
        var p = qpPairs[i].split('=');
        if(p[0] === '@windowId') {
            windowId = p[1];
            continue;
        }
        if(p[0] === '@domainTitle') {
            domainTitle = p[1];
            continue;
        }
    }

    $.post({
        url: '/ta/rest/ui/screen/stack?@windowId=' + windowId,
        contentType: 'application/json',
        data: JSON.stringify({ 'path': path, 'domain_title': domainTitle })
    });
}

function hamburgAdminChange(sel){
    eval(sel.value)
    sel.selectedIndex = 0
    hideMenuFrame();
    hideLeftFrame();
    hideHamburgerMenu();
}


function findFramesetById(name) {
  return parent.document.getElementById(name)

}

function insertAfter(newNode, referenceNode) {
  referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling);
}

function showPanel(embeddedUrl, launchPoint, triggerId) {
  var mainFrameset = window.top.MAIN_FRMSET
  if (mainFrameset && mainFrameset.cols) {
    var menuFrameCols = mainFrameset.cols.split(',')[0]
    mainFrameset.cols = menuFrameCols + ', *, 380px'
  }
  var personalExperienceFrame = findFramesetById('PERSONAL_EXPERIENCE_PANEL')
  if (!personalExperienceFrame) {
    personalExperienceFrame = document.createElement('frame')
    personalExperienceFrame.id = 'PERSONAL_EXPERIENCE_PANEL'
    personalExperienceFrame.src = embeddedUrl
    personalExperienceFrame.scrolling = 'no'
    personalExperienceFrame.noResize = 'true'
    personalExperienceFrame.frameBorder='0'
    if (isIE() || isMsIE11()) {
      personalExperienceFrame.style.setAttribute('border-left', 'thin solid #cccccc')
      personalExperienceFrame.style.setAttribute('box-shadow', '0 3px 5px rgba(0, 0, 0, 0.2)')
    } else {
      personalExperienceFrame.style = 'border-left: thin solid #cccccc;' +
          	'-webkit-box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2);' +
          	'box-shadow: 0 3px 5px rgba(0, 0, 0, 0.2);'
    }

    insertAfter(personalExperienceFrame, mainFrameset.lastChild)
    personalExperienceFrame.onload = function() {
      sendPersonalExperiencePanelMessage()
      postActiveTab(personalExperienceFrame, launchPoint, triggerId)
    }
  } else {
    sendPersonalExperiencePanelMessage()
    postActiveTab(personalExperienceFrame, launchPoint, triggerId)
  }
}

function postActiveTab(frame, launchPoint, triggerId) {
  var message = {
    type: 'MSG_HCM_OPEN_SUPPORT_PANEL'
  }
  if (launchPoint) {
    message.launch_point = launchPoint
  }
  if (triggerId) {
    message.trigger_id = triggerId
  }
  frame.contentWindow.postMessage(message, '*')
}

function getBlendedLink() {
  var blendedLink = window.top.ADMIN_CENTER.TheForm.action
  var activeFrame = getActiveFrame()
  var spaCenter = activeFrame && activeFrame.SPA_CENTER
  if (spaCenter) {
    blendedLink += '&spaUri=' + spaCenter.location.hash.split('#')[1]
  }
  var categoryTitle = getCategoryTitle()
  if (categoryTitle) {
    blendedLink += '&categoryTitle=' + categoryTitle.textContent
  }
  var pageTitle = getPageTitle()
  if (pageTitle) {
    blendedLink += '&pageTitle=' + pageTitle
  }
  return blendedLink
}

function getPageTitle() {
  var pageTitle =  window.top.ADMIN_CENTER.PAGE_TITLE_TEXT
  if (pageTitle && pageTitle.textContent !== '') {
    return pageTitle.textContent
  }
  var activeFrame = getActiveFrame()
  var iFrame = activeFrame && activeFrame.SPA_CENTER
  var spaLink = iFrame && iFrame.document.getElementsByClassName('l-page-layout-header__title')[0]
  if (spaLink) {
    return spaLink.textContent
  }
  return
}

function getCategoryTitle() {
  return window.top.ADMIN_MENU.document.getElementById('featureTitle')
}

function setMainFramesetCols(newFrameSetCols) {
  var mainFrameset = window.top.MAIN_FRMSET
  var cols = mainFrameset.cols

  if (cols && cols.split(',').length === 3) {
    newFrameSetCols += ', 380px'
  }

  mainFrameset.cols = newFrameSetCols
}

function refreshSearchIfPanelOpened() {
  if (!isPanelOpened()) {
    return
  }
  sendPersonalExperiencePanelMessage()
}

addOnLoad(refreshSearchIfPanelOpened)

function isPanelOpened() {
  var mainFrameset = findFramesetById('MAIN_FRMSET')
  var cols = mainFrameset && mainFrameset.cols && mainFrameset.cols.split(',')
  return cols && cols[cols.length-1] === ' 380px'
}

function sendPersonalExperiencePanelMessage() {
  var personalExperienceFrame = findFramesetById('PERSONAL_EXPERIENCE_PANEL')
  if (!personalExperienceFrame) {
    return
  }
  var link = getBlendedLink()
  var message = {
      type: 'MSG_HCM_CURRENT_PAGE_LINK',
      blendedUrl: link
  }
  personalExperienceFrame.contentWindow.postMessage(message, '*')
}

function showPxpLabel(compId, accId, triggerIds) {
  if (isAllEventsSeen(compId, accId, triggerIds)) {
    return
  }
  renderPxpLabel()
}

function renderPxpLabel() {
  var pxpQuestion = document.getElementById('icon-pxp-question-circle')
  if (!pxpQuestion) {
    return
  }
  pxpQuestion.classList.add('m-notice')
  pxpQuestion.classList.add('m-warning-notice')
}

function isAllEventsSeen(compId, accId, triggerIdsStr) {
  var seenEventsStr = localStorage.getItem(compId + '_' + accId + '_seenEvents')
  var seenEvents = seenEventsStr ? JSON.parse(seenEventsStr) : {}
  var triggerIds = triggerIdsStr ? JSON.parse(triggerIdsStr) : []
  return triggerIds.every(function (id) { return seenEvents[id] })
}


/** END Reset Button Functions **/

function transferMessagesToParent(e) {
  if (e.origin !== window.location.origin) {
    return
  }
  if (e.source !== window.parent) { // we should not return messages that comes from parent
    if (window.parent && window.frameElement) {
      if (typeof e.data === 'string') {
        try {
          var dataObj = JSON.parse(e.data)
          if (dataObj && dataObj.key === 'WRITE_DOCUMENT' && dataObj.msg.target === window.frameElement.name) {
            renderHtmlDocumentInChrome(dataObj.msg.HTML);
            return
          }
          if (dataObj && dataObj.key !== "NEXT_INCLUDE") {
            if (!dataObj.senders) {
              dataObj.senders = []
            }
            dataObj.senders.unshift(window.frameElement.src)
            window.parent.postMessage(JSON.stringify(dataObj), '*')
          }
        } catch (ex) {
          console.log('failed with parsing JSON', ex)
        }
      }
    }
  }
}

window.addEventListener('message', transferMessagesToParent)





window.isEmbedAdmin = false
window.isBlended = false

var popupTitleHeight = 80

function resetFormSubmit(){
    if (window.parent === window) {
        return
    }
    var f = document.forms.TheForm
    if (!f) {
        return
    }
    var oldSubmit = f.submit
    f.submit = function() {
        if (window.isEmbedAdmin && !fileUpload(TheForm) && !TheForm.isDownload) {
            ajaxSubmitTheForm();
        } else {
            sendMessageToParent(JSON.stringify({ key: "NATIVE_FORM_SUBMITTED" }));
            oldSubmit.call(f)
            delete TheForm.isDownload
        }
    }
}

setTimeout(function() {resetFormSubmit()}, 100)

function getWindowDim(){
 var r = new Object();
 var pgGray=getDocElm('PAGE_GRAY');
 pgGray.className='pageGrayNoOpacity';
 pgGray.style.display='block';
 r.w = pgGray.offsetWidth;
 r.h = pgGray.offsetHeight;
 pgGray.style.display='none';
 return r;
}

function adminRemoveAfterBody() {
  $('#AFTER_BODY').css({'height': '0px'});
}

function getFloatMenuHeight() {
  return $('#PAGE_TITLE').outerHeight() + $('#AFTER_BODY').outerHeight();
}

function setDialogFocus(btn) {
    var elem = $("#cpDialogBody :input:not(input[type=button],input[type=submit],input[type=image],button):visible:first");
    if (elem.length) {
        elem.focus();
    } else {
        document.forms[0][btn].focus();
    }
}

function calcDialogBodyHeight() {
  var $dialogBody = $('#cpDialogBody');
  if (!$dialogBody || $dialogBody.length === 0) {
     return;
  }

  if (getDocElm('AjaxConfTable').offsetHeight > getWindowDim().h - 250) {
     $dialogBody.css({'max-height': getWindowDim().h - 250 + 'px'});
     $dialogBody.addClass('scrollable');
  }
}

function ajaxConfirmPos() {
 try {
  var top =parseInt( (getWindowDim().h-getDocElm('AjaxConfTable').offsetHeight)/2-(getWindowDim().h*0.1));
  if (top<0) top = 0;
  if (top >= 0) {
   getDocElm('AjaxConfDiv').style.paddingTop=top;
  }
 } catch(e) {}
}

function doLeftClick(url, nw) {
  if (nw) {
    window.open(url, '_blank');
  } else {
    if (parent.frames.ADMIN_LEFT) {
        parent.frames.ADMIN_LEFT.location = url;
    }
  }
  if (parent.frames.ADMIN_MENU) {
    parent.frames.ADMIN_MENU.hideMenuFrame();
  }
}

function showLeftFrame(cc) {
  if (isIE()) {
    parent.frames.ADMIN_CENTER_FRMSET.cols=cc;
    parent.frames.ADMIN_CENTER.noResize=false;
  } else {
    var ff = parent.document.getElementById('ADMIN_CENTER_FRMSET');
    ff.setAttribute('frameBorder',1);
    ff.setAttribute('border',2);
    ff.cols=cc;
  }
}
function hideLeftFrame() {
  if (isIE()) {
    parent.frames.ADMIN_CENTER_FRMSET.cols='0,*';
    parent.frames.ADMIN_CENTER.noResize=true;
    parent.frames.ADMIN_CENTER.frameborder = 0;
  } else {
    var ff = parent.document.getElementById('ADMIN_CENTER_FRMSET');
    ff.setAttribute('frameBorder',0);
    ff.setAttribute('border',0);
    ff.cols='0,*';
  }
}

function showToolTipFocus(_text, width, topAdjustment, e) {
  var x,y,offset;
  offset= $(e.target).offset();
  x = $(e.target).offset().left - getPageX();
  y = $(e.target).offset().top - getPageY();

  if(topAdjustment) {
    y += topAdjustment;
  }
  _showToolTip(_text, x, y, width);
}

function showToolTip(_text, width){
document.getElementById("ToolTipDiv").classList.remove("lazytooltip");
  var x = event.clientX;
  var y = event.clientY;
  _showToolTip(_text, x, y, width);
}
function _showToolTip(_text, x, y, width){
  if (isNaN(width) || width <= 0) {
    width=2000;
  }

  while(_text.search('\n') > -1) {
    var breakLineIndex = _text.search('\n');
    _text = _text.substring(0, breakLineIndex) + '<br>' + _text.substring(breakLineIndex+1, _text.length);
  }

  var ttDiv = getDocElm('ToolTipDiv');
  ttDiv.innerHTML = "<table><tr><td>" + _text + "</td></tr></table>"; //.replace(/ /gi, "&nbsp;")
  ttDiv.style.display='block';
  ttDiv.style.width=width;
  ttDiv.style.maxWidth='85vw';
  ttDiv.style.maxHeight='60vh';
  ttDiv.style.overflow='auto';
  ttDiv.style.width=ttDiv.firstChild.clientWidth;

  if (isNull(x) || isNull(y)) {
    reshowToolTip();
  } else {
    _reshowToolTip(x,y);
  }
}
function reshowToolTip() {
  if(event){
    _reshowToolTip(event.clientX, event.clientY);
  }
}
function hideLazyTooltip(){
    var el = document.getElementById("ToolTipDiv");
    if(el.className.indexOf("lazytooltip") < 0){
     el.className += " lazytooltip";
    }
}

var SCREEN_SHORTCUTS = new Object();
var SCREEN_SHORTCUTS_ENABLED = false;

function adminProcessKeyPress(e) {
  var evnt = event;
  if (!isNull(e)) { evnt = e; }
  if (isNull(evnt)) {return;}
  var keyName = getKeyName(evnt.keyCode);
  if (evnt.shiftKey==1) {
    keyName = "Shift+" + keyName;
  }
  if (evnt.altKey==1) {
    keyName = "Alt+" + keyName;
  }
  if (evnt.ctrlKey==1) {
    keyName = "Ctrl+" + keyName;
  }

  if (!isNull(SCREEN_SHORTCUTS[keyName]) && !isNull(SCREEN_SHORTCUTS[keyName].js)) {
    eval(SCREEN_SHORTCUTS[keyName].js);
    evnt.cancelBubble=true;
    try {
      if (!isNull(evnt.preventDefault)) {
        evnt.preventDefault();
      }
    } catch (err) {}
    return false;
  }
}

function add_placeholder (obj)
{
  if (isIE()) {
    var el = document.getElementById(obj.id);
    el.placeholder = obj.placeholder;
    el.onfocus = function ()
    {
      if(this.value == this.placeholder)
      {
        this.value = '';
      }
    };
    el.onblur = function ()
    {
      if(this.value.length == 0)
      {
        this.value = this.placeholder;
      }
    };
    el.onblur();
  }
}

function addShortcut(key, label, js) {
  SCREEN_SHORTCUTS[key] = new Object();
  SCREEN_SHORTCUTS[key].label = label;
  SCREEN_SHORTCUTS[key].js = js;
  if (!SCREEN_SHORTCUTS_ENABLED) {
    SCREEN_SHORTCUTS_ENABLED = true;
    addOnKeyDown(adminProcessKeyPress);
  }
}

function _reshowToolTip(x, y, overX, overY) {
  if (!overX) overX = 0;
  if (!overY) overY = 0;

  var ttDiv = getDocElm('ToolTipDiv');
  ttDiv.style.top=y+10+getPageY()+"px";
  ttDiv.style.left=x+11+getPageX()+"px";
  if (ttDiv.clientWidth + parseInt(ttDiv.style.left) - getPageX() + 5 > document.body.clientWidth) {
    ttDiv.style.left = x - ttDiv.clientWidth - 2 + getPageX() + overX +"px";
  }
  if (ttDiv.clientHeight + parseInt(ttDiv.style.top) - getPageY() + 5 > document.body.clientHeight) {
    ttDiv.style.top = y - ttDiv.clientHeight - 2 + getPageY() + overY+"px";
  }
  if (parseInt(ttDiv.style.left) < 0) {
    ttDiv.style.left = 0+"px";
  }
}

function hideToolTip(){
  var ttDiv = getDocElm('ToolTipDiv');
  if (!isNull(ttDiv)) {
    ttDiv.innerHTML = '';
    ttDiv.style.display='none';
  }
}

function adminSetFeatureTitle(featureTitle) {
  if (!false) {
    return;
  }

  var featureTitleTextDiv;

  if (typeof window.parent.frames.ADMIN_MENU != 'undefined') {
    featureTitleTextDiv = window.parent.frames.ADMIN_MENU.document.getElementById('featureTitle')
  }

  if (featureTitleTextDiv) {
    featureTitleTextDiv.innerHTML = featureTitle;
  }
}

function adminSetTitle(pageTitle) {
  var pageTitleTextDiv = getDocElm('PAGE_TITLE_TEXT');
  var headerTitleTextDiv;

  if(typeof window.parent.frames.ADMIN_MENU != 'undefined'){
   headerTitleTextDiv = window.parent.frames.ADMIN_MENU.document.getElementById('headerTitle')
  }


  if (pageTitleTextDiv) {
    pageTitleTextDiv.innerHTML = pageTitle;
    //recalcTitleHeight();
  }
  if (headerTitleTextDiv) {
    headerTitleTextDiv.innerHTML = pageTitle;
  }
}

function adminAddTitle(pageTitle) {
 var pageTitleTextDiv = getDocElm('PAGE_TITLE_TEXT');
 var headerTitleTextDiv;

  if(typeof window.parent.frames.ADMIN_MENU != 'undefined'){
   headerTitleTextDiv = window.parent.frames.ADMIN_MENU.document.getElementById('headerTitle')
  }

  if (pageTitleTextDiv) {
    pageTitleTextDiv.innerHTML += pageTitle;
    //recalcTitleHeight();
  }

  if (headerTitleTextDiv) {
    headerTitleTextDiv.innerHTML += pageTitle;
  }
}

function adminAddTitleSubTitle(pageSTitle) {
  getDocElm('PAGE_SUB_TITLE_TEXT').innerHTML += pageSTitle;
  execJS2(pageSTitle);
}

function adminSetTitleRightBlock(pageTitle) {
  getDocElm('PAGE_TILE_RIGHT_BLOCK').innerHTML = pageTitle
  //recalcTitleHeight();
}

function adminClearTitleSubTitle() {
  //getDocElm('PAGE_SUB_TITLE_TEXT').style.display='none';
  getDocElm('PAGE_SUB_TITLE_TEXT').innerHTML='';
  //recalcTitleHeight();
}

function adminSetTitleBreadCrumbs(bc) {
  getDocElm('PAGE_TITLE_BC').innerHTML=bc;
  //recalcTitleHeight();
}

function adminClearTitleBreadCrumbs() {
  getDocElm('PAGE_TITLE_BC').innerHTML='';
  //recalcTitleHeight();
}

function adminGetMessageHeight() { if (getDocElm('PAGE_MESSAGES').style.display=='block') { return getDocElm('PAGE_MESSAGES').offsetHeight + 10;} else { return 0; } }

function adminHideBackButton() {
  $('#PAGE_BACK_BTN').addClass('hidden');
}

function adminHideHome() {
  $('#HOME_PAGE').addClass('hidden');
}

function adminHideTitle() {
  $('#PAGE_TITLE').addClass('hidden');
  $('#PAGE_TITLE').removeClass('pageTitleFloat');
  fixedTitleHeader.recalcPadding();
}
function adminShowTitle() {
  $('#PAGE_TITLE').addClass('pageTitleFloat');
  $('#PAGE_TITLE').removeClass('hidden');
  fixedTitleHeader.recalcPadding();
}


function recalcTitleHeight() {
  /*var v = getDocElm('PAGE_TITLE_HEIGHT');
  if (v==null) return;
  var t = getDocElm('PAGE_TITLE');
  if (t.style.display=='none') {
    v.style.display='none';
    return;
  }
  v.style.display='block';
  v.style.height=t.offsetHeight;*/
}

function adminAddCommandBar(data) {
  var html, items, isInProcess;
  var $commandBar = $('#PAGE_COMMAND_BAR');

  var launchAdjustCommandBar = function() {
    if (!isInProcess) {
      isInProcess = true;

      setTimeout(function() {
        adjustCommandBar(items);
        isInProcess = false;
      }, 50);
    }
  };

  if ($commandBar.length) {
    html = $commandBar.html();
    $commandBar.html(html + data);

    $commandBar.find('.commandBar li').each(function() {
      var width = $(this).width();
      $(this).attr('data-width', width);
    });

    items = {
      $commandBar: $commandBar,
      $extraCommands: $("#extraCommands"),
      $titleBlock: $commandBar.parent(),
      $showHidden: $commandBar.find('.showHidden')
    };
    adminShowTitle();

    $(window).off("load.commandBar").on("load.commandBar", launchAdjustCommandBar);
    $(window).off("resize.commandBar").on("resize.commandBar", launchAdjustCommandBar);
  }
}

function adjustCommandBar(bar) {
  var $button;
  var $items = bar.$commandBar.find('.commandBar li');
  var $extraItems = bar.$extraCommands.find('li');
  var index = $items.length - 2;
  var checkWidths = function(extraWidth) {
    return bar.$titleBlock.width() < bar.$commandBar.width() + parseInt(extraWidth);
  };

  if (checkWidths(0)) {
    while (index >= 0 && checkWidths(0)) {
      bar.$showHidden.show();
      $button = $items.eq(index).detach();
      bar.$extraCommands.prepend($button.removeClass('lastButton'));
      index--;
    }
  } else {
    while ($extraItems.length && !checkWidths($extraItems.eq(0).attr('data-width'))) {
      if (!$extraItems.eq(0).attr('data-width')) break;
      $button = $extraItems.eq(0).detach();
      bar.$showHidden.parent().removeClass('lastButton').before($button);
      $extraItems = bar.$extraCommands.find('li');
    }
    if (!$extraItems.length) {
      bar.$showHidden.hide();
    }
  }

  bar.$commandBar.find('.commandBar a:visible').last().parent().addClass('lastButton');
}


function adminRemoveListChildren(elem) {
  while (elem.lastChild && elem.childNodes.length > 1) elem.removeChild(elem.lastChild);
}
function adminUpdateElement(divId, inHTML) {
  var elm = getDocElm(divId);
  if (!isNull(elm)) {
    elm.innerHTML = inHTML;
  }
}

function doAction() {}
function doSave(p, p2){
    return doAction("SAVE",p,p2,false);
    }
function doDelete(actionParam, actionParam2, checkChanges) {return doAction("DELETE", actionParam, actionParam2, checkChanges);}
function doAjaxDelete(actionParam, actionParam2, checkChanges) {return doAjaxAction("DELETE", actionParam, actionParam2, checkChanges);}
function doAddNote(actionParam, actionParam2, checkChanges) {return doAction("ADD_NOTE", actionParam, actionParam2, checkChanges);}
function doAjaxAddNote(actionParam, actionParam2, checkChanges) {return doAjaxAction("ADD_NOTE", actionParam, actionParam2, checkChanges);}
function doObjDelete(actionParam, actionParam2, checkChanges) {return doAction("OBJDELETE", actionParam, actionParam2, checkChanges);}
function doAjaxObjDelete(actionParam, actionParam2, checkChanges) {return doAjaxAction("OBJDELETE", actionParam, actionParam2, checkChanges);}

function doAjaxObjDelete2(actionParam, actionParam2, checkChanges) {return doAjaxAction("OBJDELETE2", actionParam, actionParam2, checkChanges);}

function doActionOnEnter(event, prm1, prm2, prm3, prm4) {
  var iKeycode = getEventKeyCode(event);
  if (iKeycode != 13) {
    return true;
  }
  event.cancelBubble=true;
  return doAction(prm1, prm2, prm3, prm4);
}

function doActionSaveScroll(prm1, prm2, prm3, prm4, prm5, prm6) {
  var scroll = getPageReportScroll();TheForm['z98G2'].value = scroll.y;TheForm['z988Y'].value = scroll.x;
  return doAction(prm1, prm2, prm3, prm4, prm5, prm6);
}

function doRefresh(p, p2){return doAction("LAST",p,p2,false);}

function adminClearBody() {
  getDocElm('PAGE_BODY').innerHTML='';
}

function adminClearScreen() {
  adminClearBody();
  adminHideTitle();
  adminHideAllMessages();
}

var ADMIN_CHECK_PAGE_CHANGES=null;
function adminCheckPageChanges(bCheck) {
  if (bCheck) {
    ADMIN_CHECK_PAGE_CHANGES = checkOnUnload;
  } else {
    ADMIN_CHECK_PAGE_CHANGES = null;
  }
}

function adminIsCheckPageChanges() {
  return ADMIN_CHECK_PAGE_CHANGES != null;
}

var adminNeedsSaving = false;
function adminSetNeedSaving(b) { adminNeedsSaving = b; }

function checkOnUnload(){
  if (isUserLoggedOut()) return;
  var vChanged = adminNeedsSaving || didFormValuesChange(TheForm);
  if (vChanged) {
    var text = getAlertChangesText();
	if(event) {
     event.returnValue = text;
    }
    return text;
  }
}
function adminOnBeforeUnload() {
  var ret = null;
  if (ADMIN_CHECK_PAGE_CHANGES != null) {
    ret = ADMIN_CHECK_PAGE_CHANGES();
  }
  if (!isBlank(ret)) {
    return ret;
  }

  fullScreenMode.showStandardScreen();
}

var ON_BEFORE_SUBMIT = new Array();
function addOnBeforeSubmit(func){
  ON_BEFORE_SUBMIT[ON_BEFORE_SUBMIT.length] = func;
  return ON_BEFORE_SUBMIT.length-1;
}

function adminTheFormOnBeforeSubmit() {
  for (var i = 0; i < ON_BEFORE_SUBMIT.length; i++) {
    ON_BEFORE_SUBMIT[i]();
  }
}

function adminTheFormSubmit() {
  adminTheFormOnBeforeSubmit();
  TheForm.submit();
}

function adminAddOnUnloadHandler() {

  window.onbeforeunload=adminOnBeforeUnload;

}
addOnLoad(adminAddOnUnloadHandler);

var defFormAction = function() {TheForm.submit();}

function runDefAction() {
  return defFormAction();
}

var ActionsToConfirm = new Object();
function beforeDoAction(actionType, extraPrms, extraPrms2, checkChange) {
  if (ActionsToConfirm[actionType]) {
    alert(ActionsToConfirm[actionType]);
  }
}

function adminRedirect(_url){
    window.location=_url;
}

function adminTogleBoxState(boxId) {
  boxSt = TheForm['BxSt' + boxId].value;
  helpId = TheForm['BxHlp' + boxId].value;
  if (boxSt == 1) {
    TheForm['BxSt' + boxId].value=0;
    getDocElm('BxBody' + boxId).parentNode.parentNode.style.display='none';
    $('#BxImg' + boxId).addClass('minimized');
    saveScreenLayoutInfo('BOX_STATE_' + helpId, 'MIN');
  } else {
    TheForm['BxSt' + boxId].value=1;
    getDocElm('BxBody' + boxId).parentNode.parentNode.style.display='block';
    $('#BxImg' + boxId).removeClass('minimized');
    saveScreenLayoutInfo('BOX_STATE_' + helpId, 'MAX');
  }
  return false;
}

function adminMinimizeAllBoxes() {
  for (var i = 0; i < TheForm.elements.length; i++) {
    var nm = TheForm.elements[i].name;
    if (!isNull(nm) && nm.indexOf('BxHlp') == 0) {
      boxId = nm.substring(5);
      helpId = TheForm['BxHlp' + boxId].value;
      TheForm['BxSt' + boxId].value=0;
      getDocElm('BxBody' + boxId).parentNode.parentNode.style.display='none';
      $('#BxImg' + boxId).addClass('minimized');
      saveScreenLayoutInfo('BOX_STATE_' + helpId, 'MIN');
    }
  }
  return false;
}

function adminMaximizeAllBoxes() {
  for (var i = 0; i < TheForm.elements.length; i++) {
    var nm = TheForm.elements[i].name;
    if (!isNull(nm) && nm.indexOf('BxHlp') == 0) {
      boxId = nm.substring(5);
      helpId = TheForm['BxHlp' + boxId].value;
      TheForm['BxSt' + boxId].value=1;
      getDocElm('BxBody' + boxId).parentNode.parentNode.style.display='block';
      $('#BxImg' + boxId).removeClass('minimized');
      saveScreenLayoutInfo('BOX_STATE_' + helpId, 'MAX');
    }
  }
  return false;
}

function saveUserPref(pref,value,vType){
  var xmlHttp = getXmlHttp();
  window.rnd = r = window.rnd ? window.rnd+1 : 1;
  xmlHttp.open('POST','/ta/Default.ajax?rnd=XLA&@impl=zeyt.ui.screen.AjaxControl_SetUserPref&@windowId=JRABV&@showStackMB=0&@pushOnStack=0&@noBG=1&@showMB=1'+r,true);
  var postData = 'PrefName='+escapeStr(pref)+'&PrefValue='+escapeStr(value)+'&PrefType='+escapeStr(vType);
  xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  xmlHttp.send(postData);
}

function saveScreenLayoutInfo(pref,value){
  var xmlHttp = getXmlHttp();
  window.rnd = r = window.rnd ? window.rnd+1 : 1;
  xmlHttp.open('POST','/ta/Default.ajax?rnd=HOU&@impl=zeyt.ui.screen.AjaxControl_SaveTabbedLayoutInfo&@windowId=WENLP&@showStackMB=0&@pushOnStack=0&@noBG=1&@showMB=1'+r,true);
  var postData = 'PrefName='+escapeStr(pref)+'&PrefValue='+escapeStr(value);
  var tabFormName = 'z9BSY';
  if (!isNull(TheForm[tabFormName])) {
    postData +='&' + tabFormName + '=' + TheForm[tabFormName].value;
  }
  xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  xmlHttp.send(postData);
}

function changeTab(controlId, tabNum,chkChanges) {
  if (chkChanges) {
    var vChanged = adminNeedsSaving || didFormValuesChange(TheForm);
    if (vChanged) {
      doAjaxAction('CHANGE_TAB_PRESAVE:' + controlId, tabNum);
      return;
    }
  }
  return doAction('CHANGE_TAB:' + controlId, tabNum);
}

function changeCompanyEIN(that, prevValue, chkChanges) {
  that.setAttribute('changeMade', 0)
  if (chkChanges) {
    var vChanged = adminNeedsSaving || didFormValuesChange(TheForm);
    if (vChanged) {
      doAjaxAction('CHANGE_EIN_PRESAVE', prevValue);
      return;
    }
  }
  return doAction('CHANGE_EIN');
}

function changeLanguage() {
  document.TheForm.submit();
}

function changeObjectScrollerPage(newIndex, currentIndex, currentIndexParamName, hasChangedParamName, urls) {
  var vChanged = adminNeedsSaving || didFormValuesChange(TheForm);
  if (vChanged) {
    if (!confirm(getAlertChangesText(true))) {
      return;
    }
  }
  adminCheckPageChanges(false);

  TheForm[currentIndexParamName].value = newIndex;
  if (newIndex != currentIndex) {
    TheForm[hasChangedParamName].value = 1;
  }

  var url = urls && urls[newIndex];

  var savedFormAction = TheForm.action;
  if (url) {
    TheForm.action = url;
  }

  TheForm.submit();
  TheForm.action = savedFormAction;

  return false;
}

function ajaxSubmitTheForm() {
  ajaxSubmitForm(TheForm, function(xmlHttp, target) {
    renderHtmlDocument(xmlHttp.responseText, target)
  });
}

function cleanDocumentObject(document) {
    Object.keys(document)
          .filter(function(p) { return Object.getOwnPropertyDescriptor(document, p).configurable })
          .forEach(function(p) { delete document[p] })
}

function renderHtmlDocumentInChrome(html) {
    cleanDocumentObject(document);
    document.open("text/html", "replace");
    document.write(html);
    document.close();
}

function isTargetInParents(target) {
  var parent = window.parent
  if (parent === null) {
    return false
  }
  if (parent.frameElement && parent.frameElement.name === target) {
    return true
  }
  if (parent.isTargetInParents) {
    return parent.isTargetInParents(target)
  }
  return false
}

function renderHtmlDocument(html, target) {
  // in chrome and edge content of parent frame cannot be replaced from child frame so we have to send message to target frame and replace content there.
  if ((HM_CHRO || HM_EDGE) && target && isTargetInParents(target)) {
    sendMessageToParent(JSON.stringify({
      key: 'WRITE_DOCUMENT',
      msg: {
        HTML: html,
        target: target,
        }
      }));
    return
  }

  var doc = document;
  if (target && typeof target === 'object') {
    doc = target
  } else if (target && _getFrameByName(target, window.top)) {
    doc = _getFrameByName(target, window.top).document
  } else {
    var popupFrame = getDocElm('PopupBodyFrame')
    if (popupFrame) {
      doc = popupFrame.contentDocument
    } else if (target) {
        // if target was specified but doesnt exist we cannot replace content.
        return
    }
  }

  cleanDocumentObject(doc);
  // in IE we have to sends message with new content
  if (HM_IE || HM_MSIE11) {
    var data = {
      key: "REPLACE_CONTENT",
      msg: {
        HTML: html,
        target: target
      }
    }
    if (popupFrame) {
      data.senders = [popupFrame.src]
    }
    sendMessageToParent(JSON.stringify(data));
  } else {
    // in other browsers content of iframe cannot be replaced from outside because of CSP.
    doc.open("text/html", "replace");
    doc.write(html);
    doc.close();
  }

}

function getCurrentFrameDoc(element) {
    var doc = element.ownerDocument;
    return doc;
}

function ajaxSubmitForm(form, callback) {
  sendMessageToParent(JSON.stringify({key: "FORM_SUBMITTED"}));

  var xmlHttp = getXmlHttp()
  var url = form.action
  var target = form.target || getCurrentFrameDoc(form)
  url += ((url.charAt(url.length - 1) == '?' || url.charAt(url.length - 1) == '&') ? '' : (url.indexOf('?') > -1) ? '&' : '?')
  xmlHttp.open('POST', url, true)
  xmlHttp.onreadystatechange = function() {
    if (xmlHttp.readyState != 4) {
      return
    }
    if (xmlHttp.status != 200) {
      return
    }
    callback(xmlHttp, target)
  }
  window.currentXmlHttp = xmlHttp
  var postData = buildPOST(form)
  xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
  xmlHttp.send(postData)
}

function ajaxLoadPage(url) {
  ajaxGetPage(url, function (xmlHttp) {
    renderHtmlDocument(xmlHttp.responseText)
    sendMessageToParent(JSON.stringify({key:"FRAME_CREATED",msg:{id:window.name}}));
  });
}

function ajaxGetPage(url, callback) {
  var xmlHttp = getXmlHttp()
  xmlHttp.open('GET', url, true)
  xmlHttp.onreadystatechange = function() {
    if (xmlHttp.readyState != 4) {
      return
    }
    if (xmlHttp.status != 200) {
      return
    }
    callback(xmlHttp)
  }
  xmlHttp.send()
}

function fileUpload(form) {
    var inputs = form.getElementsByTagName('input');
    var inputsArray = Array.prototype.slice.call(inputs, 0)
    var fileInputs = inputsArray.filter(function(i) {
            return i.type.toLowerCase() === 'file'
        })
    var uploadingFiles = fileInputs.filter(function(fi) {
            return fi.value.length > 0
        })
    return uploadingFiles.length > 0
}

function createHiddenInput(name, value) {
  var input = document.createElement('input');
  input.setAttribute('type', 'hidden');
  input.setAttribute('name', name);
  input.setAttribute('value', value);
  return input;
}

function doAjaxCustomFormPreSave(action) {
  var vChanged = adminNeedsSaving || didFormValuesChange(TheForm);
  if (vChanged) {
    doAjaxAction(action + '_PRESAVE');
    return;
  }
  return doAjaxAction(action);
}

var bSaf = (navigator.userAgent.indexOf('Safari') != -1);
var bOpera = (navigator.userAgent.indexOf('Opera') != -1);
var bMoz = (navigator.appName == 'Netscape');
function execJS(node) {
  var st = node.getElementsByTagName('SCRIPT');
  var strExec;
  for(var i=0; i<st.length; i++) {

    if (bSaf) {
      strExec = st[i].innerHTML;
    } else if (bOpera) {
      strExec = st[i].text;
    } else if (bMoz) {
      strExec = st[i].textContent;
    } else {
      strExec = st[i].text;
    }
    try {
      eval(strExec.split("<!--").join("").split("-->").join(""));
    } catch(e)  {}
  }
}

function execJS2(html, callback) {
 var re = /<script\b[\s\S]*?>([\s\S]*?)<\//ig;
 var match;
 while (match = re.exec(html)) {
  eval(match[1]);
 }
 if(callback!=null) {
   callback();
 }
};

var ON_BEFORE_REPLACE_CONTENT = [];
//adds a function to be called before element contents are cleared/overwritten
function addOnBeforeReplaceContent(func){
  return ON_BEFORE_REPLACE_CONTENT.push(func) - 1; //returns index
}

//called before element contents are cleared/overwritten
function adminTheFormOnBeforeReplaceContent(el) {
  for (var i = 0; i < ON_BEFORE_REPLACE_CONTENT.length; i++) {
    ON_BEFORE_REPLACE_CONTENT[i](el);
  }
}

var ObjToHighlight = new Array();
var ObjToRemoveHigh = new Array();
function addObjToHighligh(objToH) {
  ObjToHighlight[ObjToHighlight.length] = objToH;
}
function highlightObjs() {
  for (var i = 0; i < ObjToHighlight.length; i++) {
    if (!isNull(ObjToHighlight[i])) {
      highlightObj(null, ObjToHighlight[i]);
    }
    ObjToHighlight[i] = null;
  }
  setTimeout(removeHighlighObjs, 500);
}

function removeHighlighObjs() {
  for (var i = 0; i < ObjToRemoveHigh.length; i++) {
    if (!isNull(ObjToRemoveHigh[i])) {
      ObjToRemoveHigh[i].style.display='none';
    }
    ObjToRemoveHigh[i] = null;
  }
}

var highlightId = 0;
function highlightObj(options, objToH) {
  var options = options || {};
  var zindex = options.zindex || 50;
  var opacity = options.opacity || 30;
  var opaque = (opacity / 100);
  var bgcolor = options.bgcolor || '#cccccc'; //#ffff66
  var tnode = document.createElement('div');
  var container = objToH.parentElement;

  var tNodeId = 'highlightObj' + (highlightId++);
  tnode.style.position='absolute';
  tnode.style.width=objToH.offsetWidth;
  tnode.style.height=objToH.offsetHeight;
  tnode.id=tNodeId;
  container.insertBefore(tnode, container.firstChild);
  ObjToRemoveHigh.push(tnode);

  tnode.style.opacity=opaque;
  tnode.style.MozOpacity=opaque;
  tnode.style.filter='alpha(opacity='+opacity+')';
  tnode.style.zIndex=zindex;
  tnode.style.backgroundColor=bgcolor;
}

function grayOutDef() {
  grayOut(true);
}

function grayOut(vis) {
 hidePopUp();
 var pgGray=getDocElm('PAGE_CONFIRM_GRAY');
 if (vis) {
   pgGray.style.display='block';
 } else {
   pgGray.style.display='none';
 }
}

function confirm_done(clrMsgs, clrGray, keepAliveOnAjax) {
 if (isNull(clrMsgs)) {
   clrMsgs = true;
 }
 if (isNull(clrGray)) {
   clrGray = true;
 }
 if (isNull(keepAliveOnAjax)) {
   keepAliveOnAjax = false;
 }
 if (!keepAliveOnAjax) {
   TheForm['z2R5U'].value='';
   TheForm['z2RCY'].value='';
   TheForm['z97UQ'].value='';
   TheForm['z2QRM'].value=0;
 }
 if (clrMsgs && !keepAliveOnAjax) {
   adminClearMessages();
 }
 if (clrGray && !keepAliveOnAjax) {
   hideConfirmDialog();
 }
}

function hideConfirmDialog() {
  grayOut(false);
  var dark=document.getElementById('confirmScreenObject');
  if (dark) {
    dark.style.display='none';
    adminTheFormOnBeforeReplaceContent(dark);
    dark.innerHTML = '';
  }
  dark = document.getElementById('ADMIN_CONFIRM');
  if (dark) {
    dark.style.display='none';
    adminTheFormOnBeforeReplaceContent(dark);
    dark.innerHTML = '';
  }
}

var adminPageAddHTML_NextId=0;
function adminPageAddHtml(html) {
  adminPageAddHTML_NextId++;
  var tbody = TheForm;
  var tnode = document.createElement('div');
      tnode.style.position='absolute';
      tnode.style.top='0px';
      tnode.style.left='0px';
      tnode.style.overflow='hidden';
      tnode.style.display='none';
      tnode.id='adminPageAddHtml_' + adminPageAddHTML_NextId;
  tbody.appendChild(tnode);
  tnode.innerHTML = html;
  execJS2(html);
}

function adminPageConfirm(html) {
  var cnf=document.getElementById('confirmScreenObject');
  if (cnf) {
    adminTheFormOnBeforeReplaceContent(cnf);
  } else {
    var tbody = TheForm;
    var headTableRow = document.querySelector('#headTableRow > td');
    if (headTableRow) {
      tbody = headTableRow;
    }
    var tnode = document.createElement('div');
        tnode.style.position='fixed';
        tnode.style.top='0px';
        tnode.style.left='0px';
        tnode.style.bottom='0px';
        tnode.style.right='0px';
        tnode.style.display='none';
        tnode.id='confirmScreenObject';
    tbody.appendChild(tnode);
    cnf=document.getElementById('confirmScreenObject');
  }
  cnf.innerHTML = html;
  cnf.style.zIndex='1600';
  cnf.style.width=document.body.clientWidth;
  cnf.style.height=getDocElm('PAGE_CONFIRM_GRAY').offsetHeight;
  cnf.style.display='block';

  execJS2(html);
}

function showTopLoading(b) {
  var obj = getDocElm('LoadingDiv');
  if (obj != null) {
    obj.style.display=b?'block':'none';
  }
}

function mnuItemShow(id, vis) {
  obj = getDocElm('MnuItm' + id);
  if (obj != null) {
    obj.style.display=vis?"block":"none";
  }
}

var ON_BEFORE_AJAX = new Array();
function addOnBeforeAjax(func){
  ON_BEFORE_AJAX[ON_BEFORE_AJAX.length] = func;
  return ON_BEFORE_AJAX.length-1;
}

function adminTheFormOnAjax() {
  for (var i = 0; i < ON_BEFORE_AJAX.length; i++) {
    ON_BEFORE_AJAX[i]();
  }
}

var responseId = 1;
function processResponseDelayed(callback) {
 if (numJsToLoad>0) {
   setTimeout(function(){processResponseDelayed(callback)}, 5);
   return;
 }
 for (var i = 0; i < responseId; i++) {
   var respObj = window["Resp" + i];
   if (respObj != null) {
     processResponse(respObj, callback);
     window["Resp" + i] = null;
   }
 }
 highlightObjs();
}

function processResponse(respObj, callback) {
  for (var i = 0; i < respObj.length; i++) {
   if (respObj[i] && respObj[i].Type) {
     var type = respObj[i].Type;
     if (type == 'JS') {
       eval(respObj[i].Params.JS);
     } else if (type == 'CONFIRM') {
       grayOutDef();
       adminPageConfirm(respObj[i].Params.HTML);
     } else if (type == 'HTML') {
       adminPageAddHtml(respObj[i].Params.HTML);
     } else if (type == 'UIFORM') {
       var obj = getDocElm('BxBody' + respObj[i].BoxId);
       if (!isNull(obj)) {
         adminTheFormOnBeforeReplaceContent(obj);
         obj.innerHTML = respObj[i].HTML;
         execJS2(respObj[i].HTML, callback);
       }
       resizeWindow();
       if (obj && respObj[i].Highligh) {
         addObjToHighligh(obj);
       }
     } else if (type == 'REPORT') {
       var obj = getDocElm('Rep_' + respObj[i].RepId);
       if (!isNull(obj)) {
         adminTheFormOnBeforeReplaceContent(obj);
         obj.innerHTML = respObj[i].HTML;
         execJS2(respObj[i].HTML, callback);
       }
       resizeWindow();
     } else if (type == 'SPA_MSG') {
        if(window.spacom && window.spacom.isFormActive()) {
            window.spacom.sendMessage(respObj[i].MsgId);
        }
     }
   }
 }
 fixedTitleHeader.recalcPadding();
}

function doAjaxActionProcessResponse(xmlHttp, actionType, extraPrms, extraPrms2, clrMsgs, clrGray, callback) {
 if (xmlHttp.readyState == 4) {
   if (xmlHttp.status != 200) {
     return doAction(actionType, extraPrms, extraPrms2);
   } else {
    try {
     var respObj = eval(xmlHttp.responseText);
    } catch(e)  {}
     respObj = respObj || [];
     if (clrMsgs) {
       adminClearMessages();
     }
     var dependentJsMap = {};
     for (var i = 0; i < respObj.length; i++) {
       if (respObj[i] && respObj[i].Type) {
         var type = respObj[i].Type;
         if (type == 'RESUBMIT_AS_DO_ACTION') {
           return doAction(actionType, extraPrms, extraPrms2);
         } else if (type == 'DEPENDENT-FILE-JS') {
           var dependency = respObj[i].Params.Dependency;
           dependentJsMap[dependency] = dependentJsMap[dependency] || [];
           dependentJsMap[dependency].push(respObj[i].Params);
         }
       }
     }
     var keepAliveOnAjax = false;
     var attr = $('#AjaxConfTable').attr('keep-alive-on-ajax')
     if (typeof attr !== 'undefined' && attr !== false) {
       keepAliveOnAjax = true;
     }
     confirm_done(clrMsgs, clrGray, keepAliveOnAjax);
     window["WIN_COMP_TO_HIDE"] = null;

     var includeJsWithDependents = function(params) {
       var objectName = params.ObjectName;
       var dependents = dependentJsMap[objectName] || [];
       var onLoadJs = function() {
         for (var i = 0; i < dependents.length; i++) {
           includeJsWithDependents(dependents[i]);
         }
       };
       includeJavaScript(params.Name, objectName, onLoadJs);
     }

     var bDoDelayed = false;
     for (var i = 0; i < respObj.length; i++) {
       if (respObj[i] && respObj[i].Type) {
         var type = respObj[i].Type;
         if (type == 'LOGOUT') {
           window.location = respObj[i].Params.URL;
           return;
         } else if (type == 'FILE-JS') {
           bDoDelayed=true;
           includeJsWithDependents(respObj[i].Params);
         } else if (type == 'FILE-CSS') {
           includeCSS(respObj[i].Params.Name);
         }
       }
     }
     if (bDoDelayed) {
       var rId = responseId;
       responseId++;
       window["Resp" + rId] = respObj;
       setTimeout(function(){processResponseDelayed(callback)}, 5);
     } else {
       processResponse(respObj, callback);
       setTimeout(highlightObjs, 10);
     }
   }
 }
}

function doAjaxAction(actionType, extraPrms, extraPrms2, chkChanges, clrMsgs, clrGray, callback) {
 return doAjaxActionToURL(TheForm.action, actionType, extraPrms, extraPrms2, chkChanges, clrMsgs, clrGray, callback);
}

function doAjaxActionToURL(actionURL, actionType, extraPrms, extraPrms2, chkChanges, clrMsgs, clrGray, callback) {
 if (typeof TheFormIsLoaded != 'undefined' && TheFormIsLoaded==1){
   addOnLoad(function(){
     doAjaxActionToURL(actionURL, actionType, extraPrms, extraPrms2, chkChanges, clrMsgs, clrGray, callback);
   });
   return;
 }

 adminTheFormOnAjax();

 if (chkChanges) {
   var vChanged = adminNeedsSaving || didFormValuesChange(TheForm);
   if (vChanged) {
     returnValue = getAlertChangesText();
     if(!confirm(getAlertChangesText(true))){ return; }
   }
 }
 var xmlHttp;
 try {
   xmlHttp = getXmlHttp();
 } catch(e)  {
   return doAction(actionType, extraPrms, extraPrms2);
 }
 window.rnd = r = window.rnd ? window.rnd+1 : 1;
 xmlHttp.open('POST',actionURL + '&@AJAX=1&rnd='+r,true);
 TheForm['z2R5U'].value=actionType;
 if (!isNull(extraPrms)) {
   TheForm['z2RCY'].value=extraPrms;
 }
 if (!isNull(extraPrms2)) {
   TheForm['z97UQ'].value=extraPrms2;
 }
 TheForm['z2QYQ'].value='TheForm';
 TheForm['z2QRM'].value=1;
 try {
   TheForm['z98N6'].value=(document.activeElement?document.activeElement.name:'');
 } catch(exp1) {}
 var postData = buildPOST();

 TheForm['z2R5U'].value='';
 TheForm['z2RCY'].value='';
 TheForm['z97UQ'].value='';
 TheForm['z2QYQ'].value='';
 TheForm['z2QRM'].value=0;
 TheForm['z98N6'].value='';

 if (isNull(clrMsgs)) {
   clrMsgs = true;
 }
 if (isNull(clrGray)) {
   clrGray = true;
 }

 xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
 xmlHttp.onreadystatechange = function() {
   doAjaxActionProcessResponse(xmlHttp, actionType, extraPrms, extraPrms2, clrMsgs, clrGray, callback);
 };
 xmlHttp.send(postData);
 return false;
}

var lastDoAction=-1;function doAction(at, ep, ep2, cc) {if (typeof TheFormIsLoaded != 'undefined' && TheFormIsLoaded==1){addOnLoad(function(){doAction(at, ep, ep2, cc);});return;}if (window.location.search.indexOf("@embedAdmin") !== -1 && typeof at === "string") {sendMessageToParent(JSON.stringify({key: 'ADMIN_ACTION_PERFORMED', msg: { type: at } }))}var lastDoActionNew=new Date().getTime();if (lastDoActionNew-lastDoAction<2000) { return false; }lastDoAction=lastDoActionNew;adminTheFormOnBeforeSubmit();ep=isNull(ep)?"":ep;ep2=isNull(ep2)?"":ep2;var vChanged = cc && (adminNeedsSaving || didFormValuesChange(TheForm));if(vChanged){ if(!confirm(getAlertChangesText(true))){ return false; } }adminCheckPageChanges(false);var scroll = getPageReportScroll();TheForm['z988Y'].value=scroll.x;TheForm['z98G2'].value=scroll.y;TheForm['z2QRM'].value=1;TheForm['z2R5U'].value=at;TheForm['z2RCY'].value=ep;TheForm['z97UQ'].value = ep2;TheForm['z2QYQ'].value='TheForm';beforeDoAction(at,ep,ep2,cc);TheForm.submit();return false;}function doRefresh() { var scroll = getPageReportScroll();TheForm['z98G2'].value = scroll.y;TheForm['z988Y'].value = scroll.x; return doAction('LAST'); }function isActionType(actionType) { return TheForm['z2QRM'].value == '1' && TheForm['z2R5U'].value == actionType; }

function showPrevScreen() {
  window.location='/ta/Default.admin?rnd=UDS&@page=doAction&@subPage=DoPrev&@windowId=ANDDQ';
  return false;
}

function MenuBar_MOver(menuItem, cssClassName) {
  menuItem.className = cssClassName;
}
function MenuBar_MOut(menuItem, cssClassName) {
  menuItem.className = cssClassName;
}

function MenuBar_Clicked(menuItemId, clickUrl, frameName) {
  if (!isBlank(frameName)) {
    var origTarget=TheForm.target;
    var origAction=TheForm.action;
    TheForm.action=clickUrl;
    TheForm.target=frameName;
    if (frameName === 'ADMIN_CENTER' && TheForm.InPopUp) {
      TheForm.InPopUp.value = 0;
    }
    //TheForm.method='GET';
    TheForm.submit();
    TheForm.action=origAction;

    TheForm.target=origTarget;
    //TheForm.method='POST';
    return;
  }
  window.location = clickUrl;
}


// ProgressBar

function adminUpdateProgressStatus(total, row, _msg, bShowCount){

  var pageProg = getDocElm('PAGE_PROGRESS_MAIN');

  if (total<row) {
    var v = total;
    total=row;
    row=v;
  }
  var perDone = row*100.0/total;

  var msgToAdd = "";
  var msgToAddTotal = "";

  if (bShowCount) {
    msgToAdd = msgToAdd + ' ' + row;
    msgToAddTotal = msgToAddTotal + '/' + total;
  }
  if (isNaN(perDone)) {
    perDone=0;
  }

  if (!isNull(_msg)) {
    getDocElm('PG_PRGRS_1_TITLE').innerHTML=_msg;
  }

  getDocElm('PG_PRGRS_1_PER').innerHTML=parseInt(perDone)+'%';

  if (!isBlank(msgToAdd)) {
    getDocElm('PG_PRGRS_1_MSGS').innerHTML=msgToAdd;
    getDocElm('PG_PRGRS_1_MSGS_TOTAL').innerHTML=msgToAddTotal;
  }

  var pG = getDocElm('PG_PRGRS_1_PROG_G');
  var pB = getDocElm('PG_PRGRS_1_PROG_B');

  var pd = parseInt(perDone*350/100);
  var adj = 0;//(pd*1.5)%30-30;
  pG.style.width=(pd-adj)+'px';
  pG.style.left=adj+'px';
  pB.style.left=adj+'px';

  if (!isNull(pageProg.cancelLabel)) {
    var pCancel = getDocElm('PG_PRGRS_1_BTN');
    pCancel.innerHTML="<input type='button' class='secondaryButton' value='" + pageProg.cancelLabel + "' onclick='" + pageProg.cancelJs + "'>";
  }
}

function adminShowProgress(prms) {
  var pgGray=getDocElm('PAGE_GRAY');

  if (!prms.gray) {
    pgGray.className='pageGrayNoOpacity';
  }  else {
    pgGray.className='pageGray';
  }

  pgGray.style.display='block';
  var pageProg = getDocElm('PAGE_PROGRESS_MAIN');
  pageProg.style.display='block';

  pageProg.innerHTML='\x3Ctable cellspacing=0 class=\x27wrap-table\x27\x3E\x3Ctbody\x3E\x3Ctr\x3E\x3Ctd align=center  class=\x27ph\x27 valign=top\x3E\x3Ctable class=\x27PR_PRGRS\x27 id=\x27PR_PRGRS_1\x27\x3E\x3Ctbody\x3E\x3Ctr\x3E\x3Ctd class=\x27PG_PRGRS_TITLE\x27 id=\x27PG_PRGRS_1_TITLE\x27\x3E\x3C/td\x3E\x3C/tr\x3E\x3Ctr\x3E\x3Ctd class=\x27PG_PRGRS_MSGS\x27 \x3E\x3Cspan id=\x27PG_PRGRS_1_MSGS\x27\x3E\x3C/span\x3E\x3Cspan class=\x27PG_PRGRS_MSGS_TOTAL\x27 id=\x27PG_PRGRS_1_MSGS_TOTAL\x27\x3E\x3C/span\x3E\x3C/td\x3E\x3C/tr\x3E\x3Ctr\x3E\x3Ctd\x3E\x3Cdiv class=\x27PG_PRGRS_PROG\x27 id=\x27PG_PRGRS_1_PROG\x27\x3E \x3Cdiv class=\x27PG_PRGRS_PROG_B\x27 id=\x27PG_PRGRS_1_PROG_B\x27 style=\x27left: 0px;\x27\x3E\x3C/div\x3E \x3Cdiv class=\x27PG_PRGRS_PROG_G\x27 id=\x27PG_PRGRS_1_PROG_G\x27 style=\x27width: 121px; left: 0px;\x27\x3E\x3C/div\x3E\x3C/div\x3E\x3C/td\x3E\x3Ctd class=\x27PG_PRGRS_PER\x27\x3E\x3Cspan id=\x27PG_PRGRS_1_PER\x27\x3E0%\x3C/span\x3E\x3C/td\x3E\x3C/tr\x3E\x3C/tbody\x3E\x3C/table\x3E\x3C/td\x3E\x3Ctr\x3E\x3Ctd class=\x27PG_PRGRS_BTN\x27 id=\x27PG_PRGRS_1_BTN\x27\x3E\x3C/td\x3E\x3C/tr\x3E\x3Ctr\x3E\x3Ctd\x3E\x3C/td\x3E\x3C/tr\x3E\x3Ctr\x3E\x3Ctd valign=top class=\x27ph\x27 align=center\x3E\x3Ctable class=\x27PR_PRGRS\x27 id=\x27PR_PRGRS_2\x27\x3E\x3Ctbody\x3E\x3Ctr\x3E\x3Ctd class=\x27PG_PRGRS_TITLE\x27 id=\x27PG_PRGRS_2_TITLE\x27\x3E\x3C/td\x3E\x3C/tr\x3E\x3Ctr\x3E\x3Ctd class=\x27PG_PRGRS_MSGS\x27 \x3E\x3Cspan id=\x27PG_PRGRS_2_MSGS\x27\x3E\x3C/span\x3E\x3Cspan class=\x27PG_PRGRS_MSGS_TOTAL\x27 id=\x27PG_PRGRS_2_MSGS_TOTAL\x27\x3E\x3C/span\x3E\x3C/td\x3E\x3C/tr\x3E\x3Ctr\x3E\x3Ctd\x3E\x3Cdiv class=\x27PG_PRGRS_PROG\x27 id=\x27PG_PRGRS_2_PROG\x27\x3E \x3Cdiv class=\x27PG_PRGRS_PROG_B\x27 id=\x27PG_PRGRS_2_PROG_B\x27\x3E\x3C/div\x3E \x3Cdiv class=\x27PG_PRGRS_PROG_G\x27 id=\x27PG_PRGRS_2_PROG_G\x27\x3E\x3C/div\x3E \x3Cdiv class=\x27PG_PRGRS_PROG_F\x27 id=\x27PG_PRGRS_2_PROG_F\x27\x3E\x3C/div\x3E\x3C/div\x3E\x3C/td\x3E\x3Ctd class=\x27PG_PRGRS_PER\x27 id=\x27PG_PRGRS_2_PER\x27\x3E0%\x3C/td\x3E\x3C/tr\x3E\x3C/tbody\x3E\x3C/table\x3E\x3C/td\x3E\x3C/tr\x3E\x3Ctr\x3E\x3Ctd class=\x27PG_PRGRS_BTN\x27 id=\x27PG_PRGRS_2_BTN\x27\x3E\x3C/td\x3E\x3C/tr\x3E\x3Ctr\x3E\x3Ctd\x3E\x3C/td\x3E\x3C/tr\x3E\x3Ctr\x3E\x3Ctd valign=top class=\x27ph\x27 align=center\x3E\x26nbsp;\x3C/td\x3E\x3C/tr\x3E\x3C/tbody\x3E\x3C/table\x3E';

  pageProg.cancelLabel = prms.cancelLabel;
  pageProg.cancelJs = prms.cancelJs;

  var availW = pgGray.offsetWidth;
  var availH = pgGray.offsetHeight;

  pageProg.style.display='block';
  var l = (availW-pageProg.offsetWidth)/2;

  if (l<0) l=0;
  l = l + 'px';
  pageProg.style.left=l;
  var t = (availH-pageProg.offsetHeight)/2-60;
  if (t<0) t=0;

  t = t + 'px';
  pageProg.style.top=t;

  if (!isBlank(prms.msg)) {
    getDocElm('PG_PRGRS_1_TITLE').innerHTML=prms.msg;
  }
  if (!isNull(pageProg.cancelLabel)) {
    var pCancel = getDocElm('PG_PRGRS_1_BTN');
    pCancel.innerHTML="<input type='button' class='secondaryButton' value='" + pageProg.cancelLabel + "' onclick='" + pageProg.cancelJs + "'>";
  }
}

function adminHideProgress() {
  var pgGray=getDocElm('PAGE_GRAY');
  pgGray.style.display='none';

  var pageProg = getDocElm('PAGE_PROGRESS_MAIN');
  if (isNull(pageProg)) {
    return;
  }
  pageProg.style.display='none';

  pageProg.innerHTML='';
}


function adminUpdateProgressStatus2(total, row, _msg, bShowCount){
  if (total<row) {
    var v = total;
    total=row;
    row=v;
  }
  var perDone = row*100.0/total;

  var msgToAdd = "";
  var msgToAddTotal = "";

  if (bShowCount) {
    msgToAdd = msgToAdd + ' ' + row;
    msgToAddTotal = msgToAddTotal + '/' + total;
  }

  if (isNaN(perDone)) {
    perDone=0;
  }

  if (!isNull(_msg)) {
    getDocElm('PG_PRGRS_2_TITLE').innerHTML=_msg;
  }

  getDocElm('PG_PRGRS_2_PER').innerHTML=parseInt(perDone)+'%';

  if (!isBlank(msgToAdd)) {
    getDocElm('PG_PRGRS_2_MSGS').innerHTML=msgToAdd;
    getDocElm('PG_PRGRS_2_MSGS_TOTAL').innerHTML=msgToAddTotal;
  }

  var pG = getDocElm('PG_PRGRS_2_PROG_G');
  var pB = getDocElm('PG_PRGRS_2_PROG_B');

  var pd = parseInt(perDone*350/100);
  var adj = 0;//(pd*1.5)%30-30;
  pG.style.width=(pd-adj)+'px';
  pG.style.left=adj+'px';
  pB.style.left=adj+'px';
}

function adminShowProgress2(prms) {
  getDocElm('PR_PRGRS_2').style.display='block';
  if (!isBlank(prms.msg)) {
    getDocElm('PG_PRGRS_2_TITLE').innerHTML=prms.msg;
  }
}

function adminHideProgress2() {
  var pageProg=getDocElm('PR_PRGRS_2');
  if (isNull(pageProg)) {
    return;
  }
  pageProg.style.display='none';
}

// end progress bar

function disableDrag() {
  document.ondragstart = function() { return false; };
}

function showPopUp_Lookup(prms) {
  prms.formName=TheForm[prms.fName];
  prms.dispName=TheForm[prms.dName];
  $('#PAGE_POPUP').attr('data-return-focus-to', '[name=' + prms.dName + ']');

  if (prms.formName.disabled == true) {
    return false;
  }
  var param = new Object();
  if (isNull(prms.exParams)) {
    prms.exParams = new Object();
  }
  prms.exParams.comp_value = prms.formName.value;
  prms.exParams.comp_name = prms.formName.name;

  if (prms.exParams.comp_value && prms.exParams.comp_value.length > 1100) {
    prms.exParams.comp_value=''; prms.exParams.load_from_parent='1';
  }

  if(prms.formName.minValue!=this._undef){prms.exParams.minValue = prms.formName.minValue;}
  if(prms.formName.maxValue!=this._undef){prms.exParams.maxValue = prms.formName.maxValue;}

  if(prms.w<=0){ ( prms.w=window.screen.width/2); }
  if(prms.h<=0){ ( prms.h=window.screen.height/2); }

  prms.exParams.window$width = prms.w;
  prms.exParams.window$height= prms.h;
  prms.exParams.iframe = 1;

  prms.exParams.callBack = "document.forms.TheForm." + prms.formName.name + ".setValue";

  if (!isNull(prms.callBackJS)) {
    prms.formName.setValue = eval(prms.callBackJS);
    prms.exParams.singleSelect = "y";
  } else if (prms.formName.type=="select-one"){
    var setterFunc = "addSelectValue(this,_v,_v2);";
    if(prms.formName.onchange){ setterFunc += " this.onchange();"; }
    prms.formName.setValue = new Function("_v,_v2",setterFunc);
    prms.exParams.singleSelect = "y";
  }else if(prms.singleValue==true){
    prms.exParams.singleSelect = "y";
    if(prms.dispName!=null && prms.dispName!=this._undef && !isBlank(prms.dispName.name)){
      if(prms.formName.setValueFromLookup){
        var setterFunc = "this.setValueFromLookup(_v,_v2);";
        prms.formName.setValue = new Function("_v,_v2",setterFunc);
      }else{
        prms.formName.valueId = prms.dispName;
        var setterFunc = "this.InDoLookup=1;this.valueId.InDoLookup=1;setFieldValue(this,_v);setFieldValue(this.valueId,_v2);";
        if(prms.formName.onchange){ setterFunc += " this.onchange();"; }
        if(prms.dispName.onchange){ setterFunc += " this.valueId.onchange();"; }
        setterFunc+="this.InDoLookup=0;this.valueId.InDoLookup=0;try{this.valueId.select();this.valueId.focus();}catch(e){}";
        prms.formName.setValue = new Function("_v,_v2",setterFunc);
      }
    }else{
      if(prms.formName.setValue){
      }else{
        var setterFunc = "setFieldValue(this,_v);";
        if(prms.formName.onchange){ setterFunc += " this.onchange();"; }
        prms.formName.setValue = new Function("_v",setterFunc);
      }
    }
  }else{
    var setterFunc = "appendFieldValue(this,_v);";
    if(prms.formName.onchange){ setterFunc += " this.onchange();"; }
    prms.formName.setValue = new Function("_v",setterFunc);
  }

  showPopUp(prms);
}

function showPopUp_Reposition(prms) {
  var pgGray=getDocElm('PAGE_GRAY');
  var availW = pgGray.offsetWidth;
  var availH = pgGray.offsetHeight;

  if (isNull(prms.src)&&!prms.topRight&&!prms.topLeft) {
    prms.center=1;
  }
  if (prms.center) {
    prms.x=(availW-prms.w)/2;
    prms.y=(availH-(prms.h+60))/2;
  } else if (prms.topRight) {
    prms.x=(availW-prms.w)-15;
    prms.y=1;
  } else if (prms.topLeft) {
    prms.x=0;
    prms.y=1;
  } else {
     var srcElPos = getObjPos(prms.src);
     var srcEl_Left = srcElPos.x;
     var srcEl_Top = srcElPos.y;
     var srcEl_Height = prms.src.offsetHeight;
     var srcEl_Width =  prms.src.offsetWidth;

     if(prms.pos=='bottom'){
       prms.x=srcEl_Left+srcEl_Width/2;
       prms.y=srcEl_Top+srcEl_Height/2;
     } else  if(prms.pos=='bottom-full'){
       prms.x=srcEl_Left;
       prms.y=srcEl_Top+srcEl_Height;
     } else {
       prms.x = srcEl_Left+srcEl_Width/2;
       prms.y = srcEl_Top-prms.h-40;
     }
     if (!isNull(prms.l)) {
       prms.x=prms.l;
     }
     if (!isNull(prms.t)) {
       prms.y=prms.t;
     }
     if (!isNull(prms.b)) {
       prms.y=prms.b-prms.h-50;
     }
     if (prms.y<10)
       prms.y=10;
     if (prms.y+prms.h>availH-60) {
       prms.y = availH-prms.h-60;
     }
     if (prms.x + prms.w > availW) {
       prms.x = availW-(prms.w+20);
     }
  }
}

function showPopUp(prms) {

  hideToolTip();
  var pgPopUp=getDocElm('PAGE_POPUP');
  var pgGray=getDocElm('PAGE_GRAY');
  var pgClose=getDocElm('PAGE_POPUP_CLOSE');
  var pgMaximize=getDocElm('PAGE_POPUP_MAXIMIZE_MINIMIZE');
  var pgPopBody = getDocElm('PAGE_POPUP_BODY');
  var pgTitle = getDocElm('PAGE_POPUP_TITLE');
  var pgTitleBody = getDocElm('PAGE_POPUP_TITLE_BODY');

  if (!isNull(prms.gray) && !prms.gray) {
    pgGray.className='pageGrayNoOpacity';
  }  else {
    pgGray.className='pageGray';
  }

  pgPopUp.prms=prms;

  if (!isNull(prms.cssClass)) {
    pgPopUp.className = prms.cssClass;
  }

  pgGray.style.display='block';
  var availW = pgGray.offsetWidth;
  var availH = pgGray.offsetHeight;
  if (prms.w+20>availW) {
    prms.w=availW-20;
  }
  if (prms.h+popupTitleHeight >availH) {
    prms.h=availH-popupTitleHeight;
  }
  if (isNull(prms.canMaximize)) {
    pgMaximize.style.display='none';
  } else {
    pgMaximize.style.display='block';
  }

  if(!prms.src && event && event.srcElement && event.srcElement.nodeType === 1){
    prms.src = event.srcElement;
  }

  if (isNull(prms.center)&& (!isNull(prms.src) || !isNull(prms.topLeft))) {
    prms.center=0;
  }
  if (isNull(prms.center)) {
    prms.center=1;
  }

  if (false) {
      prms.center = 1;
  }

  if (isNull(prms.title)) {
    prms.title='';
  }

  showPopUp_Reposition(prms);

  pgPopUp.style.left=prms.x + "px";
  pgPopUp.style.top=prms.y + "px";

  pgMaximize.style.top=prms.y-8+"px";
  pgMaximize.style.left=prms.x+prms.w-36+"px";
  if (prms.close != 0) {
    pgClose.style.display='block';
  }

  if (!isBlank(prms.title)) {
    pgTitleBody.style.display='block';
    popup_AddTitleMove(pgTitleBody);
    pgTitleBody.innerText=prms.title;

    if(!isBlank(prms.titleOverflow)) {
      pgTitleBody.style.textOverflow=prms.titleOverflow;
      pgTitleBody.style.overflow='hidden';
      pgTitleBody.style.whiteSpace='nowrap';
      pgTitleBody.title=prms.title;
      pgTitle.style.maxWidth=prms.w;
    }
  } else {
    pgTitleBody.style.display='none';
  }

  if (isNull(prms.exParams)) {
    prms.exParams=new Object();
  }
  prms.exParams.InPopUp=1;
  prms.exParams.PopWidth=prms.w;
  prms.exParams.PopHeight=prms.h;
  prms.url = prms.url||'';
  if (prms.url.indexOf("?") == -1) {
    prms.url += "?";
  }
  for(i in prms.exParams){
    prms.url +=  "&"+ i + "=" + escapeStr(prms.exParams[i]);
  }
  if(isNull(prms.modal)) {
    prms.modal=0;
  }
  if (!prms.modal) {
    pgGray.onclick=function() {hidePopUp();return false;}
  } else {
    pgGray.onclick='';
  }

  pgPopUp.style.display='block';

  if (prms.bodyDivId) {
    pgPopBody.innerHTML="<DIV id='"+prms.bodyDivId+"' style='width:"+prms.w+"px;height:"+prms.h+"px'></DIV>";
  } else {
    var frameId = 'PopupBodyFrame';

    var newFrameId = frameId;
    var frameUrl = prms.url;
    if (prms.post) {
      newFrameId = 'NewPopupBodyFrame';
      frameUrl = '/ta/blank.html';
    }
    if (prms.generateId) { //not the best solution, but because of bug in chrome/IE id is not changed by js and form.target will find iframe by initial Id
     newFrameId = Math.floor(Math.random() * 100001)+''+Date.now();
    }
    pgPopBody.innerHTML="<IFRAME id='"+newFrameId+"' name='"+newFrameId+"' src='"+frameUrl+"' style='width:"+prms.w+"px;height:"+prms.h+"px' FRAMEBORDER=0 BORDER=0></IFRAME>";
    if (prms.post) {
      var oldAction = TheForm.action;
      var oldTarget = TheForm.target;
      TheForm.action=prms.url;
      TheForm.target=newFrameId;
      TheForm.submit();
      TheForm.action=oldAction;
      TheForm.target=oldTarget;
      var frm=getDocElm(newFrameId);
      frm.id=frameId;
      frm.name=frameId;
    }
  }

  var urlObj = parseURL(prms.url);
  if (window.isEmbedAdmin) {
    sendMessageToParent(
      JSON.stringify({
        key: 'IFRAME_POPUP_CREATED',
          msg: {
            popupName: newFrameId,
            frameName: window.name
          }
        }));
  }
  return false;
}

function parseURL(url) {
    var parser = document.createElement('a'),
        searchObject = {},
        queries, split, i;
    // Let the browser do the work
    parser.href = url;
    // Convert query string to object
    queries = parser.search.replace(/^\?/, '').split('&');
    for( i = 0; i < queries.length; i++ ) {
        split = queries[i].split('=');
        searchObject[split[0]] = split[1];
    }
    return {
        protocol: parser.protocol,
        host: parser.host,
        hostname: parser.hostname,
        port: parser.port,
        pathname: parser.pathname,
        search: parser.search,
        searchObject: searchObject,
        hash: parser.hash
    };
}

function hidePopUp(skipBodyFocus) {
  var pgPopUp=getDocElm('PAGE_POPUP');
  if (isNull(pgPopUp)) {
    return;
  }

  var pgGray=getDocElm('PAGE_GRAY');
  var pgClose=getDocElm('PAGE_POPUP_CLOSE');
  var pgMaximize=getDocElm('PAGE_POPUP_MAXIMIZE_MINIMIZE');
  var pgPopBody = getDocElm('PAGE_POPUP_BODY');
  var pgTitle = getDocElm('PAGE_POPUP_TITLE');

  var returnFocusToItem = $(pgPopUp).attr('data-return-focus-to');
  var focusToItem = function() {
    $(returnFocusToItem).focus();
  }

  popup_RemoveTitleMove(pgTitle);

  pgMaximize.style.display='none';
  pgClose.style.display='none';
  pgGray.style.display='none';
  pgPopUp.style.display='none';
  pgPopUp.className='';
  pgPopBody.innerHTML='';
  if (!skipBodyFocus) {
    if (returnFocusToItem) {
      $(pgPopUp).removeAttr('data-return-focus-to');
      setTimeout(focusToItem, 1); // It is necessary for correct work in IE9
    } else {
      $('body').focus();
    }
  }

  var p=pgPopUp.prms;
  if (!isNull(p)) {
    var roc=p.runOnClose;
    if (!isNull(roc)) {
      eval(roc);
    }
  }
  pgPopUp.prms=null;

  return false;
}

function minMaxPopUp() {
  var pgMaxMin=getDocElm('PAGE_POPUP_MAXIMIZE_MINIMIZE');
  var pgMax=getDocElm('PAGE_POPUP_MAXIMIZE');
  var pgMin=getDocElm('PAGE_POPUP_MINIMIZE');
  var pgPopUp=getDocElm('PAGE_POPUP');
  if (isNull(pgMaxMin.ismax) || pgMaxMin.ismax == '0') {
    pgMaxMin.popupH=pgPopUp.prms.h;
    pgMaxMin.popupW=pgPopUp.prms.w;
    modifyPopUp({w:Infinity,h:Infinity});
    pgMaxMin.ismax = '1';
    pgMax.style.display = 'none';
    pgMin.style.display = 'block';
  } else{
    modifyPopUp({w:pgMaxMin.popupW,h:pgMaxMin.popupH});
    pgMaxMin.ismax = '0';
    pgMax.style.display = 'block';
    pgMin.style.display = 'none';
  }
}

function modifyPopUp(prms) {
  hideToolTip();
  var pgPopUp=getDocElm('PAGE_POPUP');
  var pgGray=getDocElm('PAGE_GRAY');
  var pgClose=getDocElm('PAGE_POPUP_CLOSE');
  var pgMaximize=getDocElm('PAGE_POPUP_MAXIMIZE_MINIMIZE');
  var pgPopBody = getDocElm('PAGE_POPUP_BODY');
  var pgTitleBody = getDocElm('PAGE_POPUP_TITLE_BODY');

  if (!isNull(prms.title)) {
    if (!isBlank(prms.title)) {
      pgTitleBody.style.display='block';
      popup_AddTitleMove(pgTitleBody);
      pgTitleBody.innerHTML=prms.title;
    } else {
      pgTitleBody.style.display='none';
    }
  }

  if (!isNull(prms.gray)) {
    if (!prms.gray) {
      pgGray.className='pageGrayNoOpacity';
    } else {
      pgGray.className='pageGray';
    }
    pgPopUp.prms.gray=prms.gray;
  }

  if (!isNull(prms.w) || !isNull(prms.h)) {
    if (isNull(prms.w)) {
      prms.w=pgPopUp.prms.w;
    }
    if (isNull(prms.h)) {
      prms.h=pgPopUp.prms.h;
    }
  }

  if (!isNull(prms.w)) {
    var availW = pgGray.offsetWidth;
    var availH = pgGray.offsetHeight;
    if (prms.w+20>availW) {
      prms.w=availW-20;
    }
    if (prms.h+popupTitleHeight>availH) {
      prms.h=availH-popupTitleHeight;
    }

    pgPopUp.prms.w=prms.w;
    pgPopUp.prms.h=prms.h;

    if (!isNull(prms.close)) {
      pgPopUp.prms.close=prms.close;
      if (prms.close != 0) {
        pgClose.style.display='block';
      }
    }

    prms=pgPopUp.prms;

    showPopUp_Reposition(prms);
    pgPopUp.style.left=prms.x + "px";
    pgPopUp.style.top=prms.y+"px";

    var frm=getDocElm('PopupBodyFrame');
    frm.style.width=prms.w + "px";
    frm.style.height=prms.h + "px";

    pgMaximize.style.top=prms.y-8+"px";
    pgMaximize.style.left=prms.x+prms.w-36+"px";

  }
}

function popup_RemoveTitleMove(pgTitle) {
    pgTitle.removeEventListener('mousedown', popup_OnMouseDown, false);
  popup_OnMouseUp();
}

function popup_AddTitleMove(pgTitle) {
    pgTitle.addEventListener('mousedown', popup_OnMouseDown, false);
}

function popup_OnMouseMove(e) {
  var x = e.clientX;
  var y = e.clientY;
  if (isIE()) {
    x = e.x;y = e.y;
  }
  var pgPopUp=getDocElm('PAGE_POPUP');

  pgPopUp.style.left=popup_X+(x-popup_MouseDownX)+"px";
  pgPopUp.style.top=popup_Y+(y-popup_MouseDownY)+"px";
}

var popup_MouseDownX=0;
var popup_MouseDownY=0;
var popup_X=0;
var popup_Y=0;
var popupClose_X=0;
var popupClose_Y=0;

function popup_OnMouseDown(e) {
 var pgPopUp=getDocElm('PAGE_POPUP');

 popup_X=parseInt(pgPopUp.style.left);
 popup_Y=parseInt(pgPopUp.style.top);

 popup_MouseDownX = e.clientX;
 popup_MouseDownY = e.clientY;
 if (isIE()) {
   popup_MouseDownX = e.x;
   popup_MouseDownY = e.y;
 }


    document.body.addEventListener('mousemove', popup_OnMouseMove, false);
    document.body.addEventListener('mouseup', popup_OnMouseUp, false);
}

function popup_OnMouseUp(e) {
    document.body.removeEventListener('mousemove', popup_OnMouseMove,false);
    document.body.removeEventListener('mouseup', popup_OnMouseUp,false);
}

function updateToDo(num) {
  try {
    var f = window.frames.ADMIN_MENU;
    if (isNull(f)) {
      f = parent.frames.ADMIN_MENU;
    }
    if (isNull(f)) {
      f = parent.parent.frames.ADMIN_MENU;
    }
    f.getDocElm('MyToDoCount').innerHTML = num;
  } catch (e) {}
}

function updateMailbox(num) {
  try {
    var f = window.frames.ADMIN_MENU;
    if (isNull(f)) {
      f = parent.frames.ADMIN_MENU;
    }
    if (isNull(f)) {
      f = parent.parent.frames.ADMIN_MENU;
    }
    f.getDocElm('MyMailboxCount').innerHTML = num;
  } catch (e) {}
}

function updateMercuryMailbox(num) {
  try {
    var f = window.frames.ADMIN_MENU;
    if (isNull(f)) {
      f = parent.frames.ADMIN_MENU;
    }
    if (isNull(f)) {
      f = parent.parent.frames.ADMIN_MENU;
    }
    f.getDocElm('MyMercuryMailboxCount').innerHTML = num;
  } catch (e) {}
}

function updateAIMEEMailbox(num) {
  try {
    var f = window.frames.ADMIN_MENU;
    if (isNull(f)) {
      f = parent.frames.ADMIN_MENU;
    }
    if (isNull(f)) {
      f = parent.parent.frames.ADMIN_MENU;
    }
    f.getDocElm('AIMEEMailboxCount').innerHTML = num;
  } catch (e) {}
}

function updateStartWidgetCounter(counterName,num) {
  try {
    var f = window.frames.ADMIN_MENU_BODY;
    var elem;
    if (isNull(f)) {
      f = parent.frames.ADMIN_MENU_BODY;
    }
    if (isNull(f)) {
      f = parent.parent.frames.ADMIN_MENU_BODY;
    }

    elem = f.getDocElm(counterName)
    if (isNull(elem)) {
      f = parent.frames.HAMBURG_MENU
      elem = f.getDocElm(counterName)
    }

    if (elem) {
        elem.innerHTML = num;
    }
  } catch (e) {}
}

/* Messages max-height */
$(function() {
  var messagesContainer = $('#PAGE_MESSAGES').find('.fc');
  var elems = messagesContainer.find('h3, .itm');
  var maxH =0;
  var str = 0;

  for (var i=0; i<elems.length; i++) {

    if(elems.eq(i).is('h3') && str < 6) {
      str++;
      if (str == 6) {
        maxH+=25
      } else
        maxH+=37;
    } else {
      if (elems.eq(i).outerHeight() > 21 && str + Math.ceil(elems.eq(i).outerHeight() / 21) < 6) {
        str += Math.ceil(elems.eq(i).outerHeight() / 21);
        maxH+= Math.ceil(elems.eq(i).outerHeight() / 21)*21

      } else if(str < 6) {
        str++;
        if (str == 6) {
          maxH+=11

        } else maxH+=21;
      }
    }
  }
  messagesContainer.css("max-height", maxH);
});

/* End of Messages max-height */

//Add class to the Popup #PAGE_BODY
function addPageBodyClass(classToAdd) {
  var pageBody = $("#PAGE_BODY");
  pageBody.addClass(classToAdd);
}

function removePageBodyClass(classToAdd) {
  var pageBody = $("#PAGE_BODY");
  pageBody.removeClass(classToAdd);
}

function addBodyClass(classToAdd) {
  var body = $("body");
  body.addClass(classToAdd);
}

function removeBodyClass(classToAdd) {
  var body = $("body");
  body.removeClass(classToAdd);
}



function recalculateMessagesContainerHeight() {
  var messagesContainer = $('#PAGE_MESSAGES').find('.fc');
  var elems = messagesContainer.find('h3, .itm');
  var maxH =0;
  var str = 0;

  for (var i=0; i<elems.length; i++) {

    if(elems.eq(i).is('h3') && str < 6) {
      str++;
      if (str == 6) {
        maxH+=20
      } else
        maxH+=27;
    } else {
      if (elems.eq(i).outerHeight() > 21 && str + Math.ceil(elems.eq(i).outerHeight() / 20) < 6) {
        str += Math.ceil(elems.eq(i).outerHeight() / 20);
        maxH+= Math.ceil(elems.eq(i).outerHeight() / 20)*20

      } else if(str < 6) {
        str++;
        if (str == 6) {
          maxH+=11

        } else maxH+=20;
      }
    }
  }
  messagesContainer.css("max-height", maxH);
  var scrollWidth = messagesContainer.width() - messagesContainer.children().first().width();
  $('.fitHeight').css("right", scrollWidth);
}

$(function() {
  recalculateMessagesContainerHeight();
});


/* End of Messages max-height */


/* Buttons Resizing */
function resizeButtons(wrapperId) {
  var container = $('#' + wrapperId);
  if (!container) {
    return;
  }
  var buttons = container.find("input[type='button'], button");
  var index = 0;
  var butLength = buttons.length;
  var maxWidth = 0;
  var currentWidth = 0;
  for (index = 0; index < butLength; index++ ) {
    currentWidth = actualWidth($(buttons[index]));
    if (currentWidth > maxWidth) {
      maxWidth=currentWidth;
    }
  }
  for (index = 0; index < butLength; index++ ) {
    buttons[index].style.width = maxWidth + "px";
  }
}

/**
 * In jQuery when an element is not visible width() always returns 0.
 * This method fix it.
 */
function actualWidth(obj) {
    var $clone = obj.clone();

    $clone.css({
        position: "absolute !important",
        visibility: "hidden !important",
        display: "block !important"
    });

    $('body').append($clone);

    var width = $clone.outerWidth();

    $clone.remove();

    return width;
}

/* End Buttons Resizing */

var fixedTitleHeader = {
  $pageTitle: null,
  $body: null,
  isGlobalWrap: false,
  init: function(skipGlobalTableCheck) {
    this.isGlobalWrap = isOneReportTablePage() && !skipGlobalTableCheck;
    this.$pageTitle = $('#FIXED_PAGE_HEADER');
    this.$body = $('#FIXED_PAGE_HEADER').parents('body');

    if (!this.isGlobalWrap) {
      this.$pageTitle.addClass('fixedHeader');

      if (!this.isScrollEvent()) {
        this.scrollEvent();
      }
    }
    this.recalcPadding();
  },
  recalcPadding: function() {
    if (!this.isGlobalWrap && this.$body) {
      if (this.$pageTitle.hasClass('hidden')) {
        this.$body.css('padding-top', 0);
        if(this.$body.hasClass('delegatedScroll')) {
            this.$body.find('form').css('top', 0);
        }
      } else {
        var height = this.$pageTitle.outerHeight();
        this.$body.css('padding-top', height);
        if(this.$body.hasClass('delegatedScroll')) {
            this.$body.find('form').css('top', height);
        }
      }
    }
  },
  isScrollEvent: function() {
    var result = false;
    events = $._data($(window).get(0), 'events');
    if (events && events.scroll) {
      var eventsLength = events.scroll.length;
      for (var i = 0; i < eventsLength; i++) {
        if (events.scroll[i].namespace === 'fixedHeader') {
          result = true;
          break;
        }
      }
    }
    return result;
  },
  scrollEvent: function() {
    var self = this;
    $(window).on('scroll.fixedHeader', function() {
      self.recalcPadding();
    });
    $(window).on('resize.fixedHeader', function() {
      self.recalcPadding();
    });
  }
};

function hijackScrollForSPA() {
    $("body").addClass("delegatedScroll");
}

function enableEmbedBackButton(data, hasPrevScreen) {
  if (!hasPrevScreen &&
    window.parent &&
    window.parent.history &&
    window.parent.history.state &&
    window.parent.history.state.isFirstScreen
  ) {
    return;
  }
  $('#PAGE_BACK_BTN').removeClass('disabled');
  $('#PAGE_BACK_BTN').attr('href', '#');

  $('#PAGE_BACK_BTN').on('click', function(e) {
    sendMessageToParent(data);
    e.preventDefault();
  });
}

function enableBackButton(href) {
  $('#PAGE_BACK_BTN').removeClass('disabled');
  $('#PAGE_BACK_BTN').attr('href', href);

  $('#PAGE_BACK_BTN').on('click', function(e) {
    if(window.spacom && window.spacom.isFormActive()) {
      window.spacom.sendMessage('MSG_UNLOAD', function() {
        window.location.href=href;
      });
      e.preventDefault();
    }
  });
}


function scrollPage(x,y) {
  var $scrollingBlock = ($('#globalWrap').length) ? $('.scrollingReport') : $(document);

  $scrollingBlock.scrollLeft(x).scrollTop(y);
}

function getPageReportScroll() {
 var scrollX, scrollY;
 var globalWrapLength = $('#globalWrap').length;

 scrollX = (globalWrapLength) ? $('.scrollingReport').scrollLeft() : getPageX();
 scrollY = (globalWrapLength) ? $('.scrollingReport').scrollTop() : getPageY();

 return {
  x: scrollX,
  y: scrollY
 }
}










var selectedMenu;
var allSubMenus;
function popUp(mnuName,e,extraInfo) {
 try {
  if (!parent.menuLoaded) {return};
  if (!isNull(selectedMenu)) {
    selectedMenu.className = '';
  if (selectedMenu.id.indexOf(mnuName) > -1 &&
    ($('#start-widget-drawer', window.parent.frames['ADMIN_MENU_BODY'].document).is(':visible') ||
        $('#menu-drawer', window.parent.frames['ADMIN_MENU_BODY'].document).is(':visible'))) {
    selectedMenu = null;
    parent.frames.ADMIN_MENU_BODY.HM_f_HideAll();
    parent.frames.ADMIN_MENU.hideMenuFrame();
    return;
  }
  }
  selectedMenu = getDocElm('TopMenu_' + mnuName);
  selectedMenu.className = 'headMenuSelected';
  if (extraInfo == 1 || (extraInfo == 2 && !isNull(parent.frames.ADMIN_MENU_BODY.HM_Menu_Shown) && parent.frames.ADMIN_MENU_BODY.HM_Menu_Shown)) {
    if (isNull(parent.frames.ADMIN_MENU_BODY.popUp))
      return;
    parent.frames.ADMIN_MENU_BODY.popUp(mnuName,e);
  }
 } catch(e) {}
}

function refreshStartItems() {
  window.parent.frames['ADMIN_MENU_BODY'].location.reload();
  if (false) {
    window.parent.frames['HAMBURG_MENU'].location.reload(true);
  }
}

function showStartItems() {
 if (!isNull(selectedMenu)) {
    selectedMenu.className = '';
  selectedMenu = null;
 }
 showMenuFrame();
 $('#start-widget-drawer', window.parent.frames['ADMIN_MENU_BODY'].document).show();
 $('#menu-drawer', window.parent.frames['ADMIN_MENU_BODY'].document).hide();
}

function handleHeaderClick(e) {
  var target = e.target
  while (target && target.tagName !== 'A') {
    target = target.parentNode
  }

  if (!target) {
    return
  }

  var frameName = target.getAttribute('target')
  if (!frameName) {
    return
  }

  var frame = frameName === 'ADMIN_CENTER' ? getActiveFrame() : getFrameByName(frameName)
  if (frame && frame.spacom && frame.spacom.isFormActive()) {
    e.stopPropagation();
    e.preventDefault();
    frame.spacom.sendMessage('MSG_UNLOAD', function() {
      var link = target.cloneNode() // to prevent invoking handleHeaderLinkClick once again
      if (link.click) {
        link.click()
      }
    });
  }
}

function hideMenuFrame(e) {
  var targ = {};
  if (!e) {
    var e = window.event || {};
  }
  if (e.target) targ = e.target;
  else if (e.srcElement) targ = e.srcElement;
  $('#mainMenu', window.parent.frames['ADMIN_MENU'].document).addClass('collapsedMenu');
  $('body', window.parent.frames['ADMIN_CENTER'].document).find(".body-overlay").remove();
  window.top.centerFrameset.reset(130);
  allSubMenus = $('.menu', window.parent.frames['ADMIN_MENU_BODY'].document);
  allSubMenus.find('a').removeClass('selectedItem');

  if ('headMenuSelected' !== targ.className) {
    $('#start-widget-drawer', window.parent.frames['ADMIN_MENU_BODY'].document).hide();
    $('#menu-drawer', window.parent.frames['ADMIN_MENU_BODY'].document).hide();
  }
}

function showMenuFrame() {
  $('#start-widget-drawer', window.parent.frames['ADMIN_MENU_BODY'].document).hide();
  $('#menu-drawer', window.parent.frames['ADMIN_MENU_BODY'].document).show();
  $('body', window.parent.frames['ADMIN_CENTER'].document).append("<div class='body-overlay' onclick='hideMenuFrame()'></div>");
  $('#mainMenu', window.parent.frames['ADMIN_MENU'].document).removeClass('collapsedMenu');
  if (isIE()) {
    if (parent.WEBAPPS_FRMSET.rows != '130,325,100%,0') {
      parent.WEBAPPS_FRMSET.rows = '130,325,100%,0';
    }
  } else {
    var set = findFramesetById('WEBAPPS_FRMSET')
    if (set.rows != '130,325,100%') {
     set.rows='130,325,100%,0';
    }
  }
}

function showHelp() {
    parent.WalkMePlayerAPI.toggleMenu();
}

function popDown(mnuName,e) {
  try {
  if (!parent.menuLoaded) {return};
    if (!isNull(selectedMenu)) {
      selectedMenu.className = 'menuItem';
    }
    if (isNull(parent.frames.ADMIN_MENU_BODY.popUp)) {
      return;
    }
    parent.frames.ADMIN_MENU_BODY.popDown(mnuName,e);
  } catch(e) {}
}

function getTopMenuXPos(mnuNum) {
  return getDocElm('TopMenu_HM_Menu' + mnuNum).offsetLeft - 1 + parent.frames.ADMIN_MENU_BODY.window.getPageX();
}
function getTopMenuYPos(mnuNum) {
  return 1 + parent.frames.ADMIN_MENU_BODY.window.getPageY();
}

var CLOCK_OFFSET_HeadJSClock = 0;

function setHeadJSClockOffset(serverDate){
 var localDate = new Date();
 var localTime = localDate.getTime();
 CLOCK_OFFSET_HeadJSClock =  serverDate.getTime() + 300 - localTime;
}

function changeHeadJSClock(isAmPm,tzName){
  var tag = getDocElm('HeadJSClock');
  var _nowDate = new Date();
  var _time = _nowDate.getTime() + CLOCK_OFFSET_HeadJSClock;
  _nowDate.setTime(_time);
  var hour = _nowDate.getHours();
  var min = _nowDate.getMinutes();
  var sec = _nowDate.getSeconds();
  if (isAmPm) {
    var _nowTimeTxt = ''+(hour==0?12:(hour>12?hour-12:hour));
    _nowTimeTxt += (min<10?':0':':') + min;
    _nowTimeTxt += ' ' + (hour>=12?'PM':'AM');
  } else {
    var _nowTimeTxt = ''+hour;
    _nowTimeTxt += (min<10?':0':':') + min;
  }
  _nowTimeTxt += ' '+tzName;

  setInnerText(tag, _nowTimeTxt);
}

function replaceParam(search, param, value) {
    const paramsMap = search.substring(1).split('&').reduce(function(acc, part){
        const pair = part.split('=');
        acc[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1]);
        return acc;
    }, {});

   paramsMap[param] = value;

   const qParams = [];
   for (var key in paramsMap) {
      if (paramsMap.hasOwnProperty(key)) {
        if (key) {
          qParams.push(key + '=' + encodeURIComponent(value));
        }
      }
   }
  return qParams.join('&');
}

function setupSystemSearch(elm) {
  parent.frames.ADMIN_MENU_BODY.HM_f_HideAll(); parent.frames.ADMIN_MENU.hideMenuFrame();
  if (!elm.prevValue) {
    elm.prevValue=elm.value;
  }
  if (elm.value==elm.prevValue) {
    elm.value='';
  }
  if (!elm.onblur) {
    elm.onblur=function() {
      if (elm.value=='') {
        elm.value=elm.prevValue;
      }
    };
    elm.onkeydown=function(event) {
      event = event ? event : window.event;
      if (event.keyCode==38 ) {
        parent.frames.ADMIN_CENTER.systemSeachHighlighPrev();
        disableEvent(event);
        return;
      }
      else if ( event.keyCode==40) {
        parent.frames.ADMIN_CENTER.systemSeachHighlighNext();
        disableEvent(event);
        return;
      }
      else if ( event.keyCode==13) {
        parent.frames.ADMIN_CENTER.systemSeachHighlighGoTo();
        disableEvent(event);
        return;
      }

    };
    elm.onkeyup=function(event) {
      event = event ? event : window.event;
      if (event.keyCode==38 || event.keyCode==40 || event.keyCode==13) {
        disableEvent(event);
        return;
      } else {
        if (elm.value=='') {
          parent.frames.ADMIN_CENTER.hideSystemSearchList();
        } else {
          parent.frames.ADMIN_CENTER.performSystemSearch(elm.value);
        }
      }
    }
  }
}

function getSystemSearchMenuItems(sv) {
  if (!parent.frames.ADMIN_MENU_BODY.menuArray) {
    createSystemSearchMenuArray();
  }

  var svSplit = sv.split(' ');
  for(var x=0; x < svSplit.length; x++){
    svSplit[x] = trim(svSplit[x]);
    svSplit[x] = svSplit[x].toUpperCase();
  }
  var ret = [];
  var all = parent.frames.ADMIN_MENU_BODY.menuArray;
  for (var i = 0; i < all.length; i++) {
    if (Rep_isStrMatch(svSplit, all[i].nameU)) {
      ret[ret.length]=all[i];
    }
  }

  return ret;
}

var numMenuSearchResults=0;
var currentlySelectedSearchResult=-1;
function systemSeachHighlighResult(num) {
  var r = getDocElm("SearchResult"+currentlySelectedSearchResult);
  if (r) {
     r.className="result";
  }
  currentlySelectedSearchResult=num;
  r = getDocElm("SearchResult"+num);
  if (r) {
    r.className="selectedResult";
  }
  return r;
}
function systemSeachHighlighNext() {
  if (currentlySelectedSearchResult+1==numMenuSearchResults) return;
  var r = systemSeachHighlighResult(currentlySelectedSearchResult+1);
  if (r) {
    r.scrollIntoView(false);
  }
}

function systemSeachHighlighPrev() {
  if (currentlySelectedSearchResult<=0) return;
  var r = systemSeachHighlighResult(currentlySelectedSearchResult-1);
  if (r) {
    r.scrollIntoView(false);
  }
}

function systemSeachHighlighGoTo() {
  var r = getDocElm("SearchResult"+currentlySelectedSearchResult);
  if (r) {
    r.onclick();
  }
}

function escapeHTML(unsafe) {
  return unsafe.replace(/&/g, "&amp;")
             .replace(/</g, "&lt;")
             .replace(/>/g, "&gt;")
             .replace(/"/g, "&quot;")
             .replace(/'/g, "&#39;");
}

function runSystemSearch(sv, position) {
  var searchResultsArea = getDocElm("SystemSearchMenuRes");
  if (!searchResultsArea) return;
  numMenuSearchResults=0;
  currentlySelectedSearchResult = -1;

  var res1=getSystemSearchMenuItems(sv);
  if (res1 && res1.length>0) {
    numMenuSearchResults = res1.length;
    renderMenuSearchItems(searchResultsArea, res1, parent.frames.ADMIN_MENU_BODY.systemSeachHead_MenuRes)
  } else {
    searchResultsArea.innerHTML='';
  }
  if (serverSideSearchTimeOut) {
    clearTimeout(serverSideSearchTimeOut);
  }
  serverSideSearchTimeOut=setTimeout(function() {runServerSideSystemSearch(sv, position);},300);
}

function renderMenuSearchItems(searchResultsArea, items, categoryLabel) {
    var sb = new StringBuffer();
    sb.append("<div class='heading'>").append(categoryLabel).append("</div>");
    for (var i = 0; i < items.length; i++) {
        var item = items[i]
        sb.append("<div id='SearchResult").append(i).append("' onclick=\"");
        sb.append("updateAndGetRecentSearch(" + escapeHTML(JSON.stringify(item.searchId))+ ");");
        if (parent.frames.ADMIN_MENU.SystemSearch) {
          sb.append("parent.frames.ADMIN_MENU.SystemSearch.value='';");
        }
        sb.append(item.click);
        sb.append("\" class='result' onmouseenter='systemSeachHighlighResult(").append(i).append(");'>");
        var res = item.name === 'Dashboard' ? item.nameParent + " " + item.name : item.name
        sb.append(escapeHTML(res));
        sb.append("<div class='parent'>").append(escapeHTML(item.nameParent)).append("</div>");
        sb.append("</div>")
    }
    searchResultsArea.innerHTML=sb.toString();
}

function cleanServerSearchResults() {
    lastServerSideSearch = null

    var serverSearchResults = getDocElm("SystemSearchServerRes");
    serverSearchResults.innerHTML = ''
}

function cleanMenuResults() {
    var menuResults = getDocElm("SystemSearchMenuRes");
    menuResults.innerHTML = ''
}

var recentMenuSearches = {}

function getRecentSearchResults() {
    updateAndGetRecentSearch()
}

function updateAndGetRecentSearch(searchId) {
  var position = 'topLeft'

  if(!searchId) {
    searchId = ''
  }

  var xmlHttp = getXmlHttp();
  window.rnd = r = window.rnd ? window.rnd+1 : 1;
  var isMercury = ''

  xmlHttp.open('POST','/ta/Default.ajax?rnd=AIY&@impl=zeyt.ui.search.recent.AjaxControl_RecentSearch&@windowId=EVCMP&@showStackMB=0&@pushOnStack=0&@noBG=1&@showMB=1'+r,true);
  var postData = 'search_id='+escapeStr(searchId);

  if (position) {
    postData = postData + '&pos=' + escapeStr(position);
  }

  if (false) {
  xmlHttp.setRequestHeader('X-Container-WindowId',r);
  }
  xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

  xmlHttp.onreadystatechange = function() {
    if (xmlHttp.readyState != 4) {
      return;
    }
    if (xmlHttp.status != 200) {
      return;
    }
    recentMenuSearches=xmlHttp.responseText;
  };
  xmlHttp.send(postData);
}

function renderSearchResults(results) {
    var d = getDocElm("SystemSearchServerRes");
    if (!d) {
        return;
    }
    d.innerHTML=results;

    var cDivs = document.getElementsByClassName("serverSR");
    var searchResultsArea = getDocElm("SystemSearchMenuRes");
    var allSearchResults = getDocElm("SystemSearchDiv")
    allSearchResults.classList.remove('no-results')
    if (cDivs.length === 0 && searchResultsArea.innerHTML.length === 0) {
        allSearchResults.classList.add('no-results')
        d.innerHTML = '<span class="result no-results">' + 'No results found' + '</span>'
    }
    for(i = 0; i < cDivs.length; i++)
    {
        cDivs[i].myId=numMenuSearchResults;
        numMenuSearchResults++;
        cDivs[i].id='SearchResult'+(cDivs[i].myId);
        cDivs[i].onmouseenter=function() {systemSeachHighlighResult(this.myId);};
    }
}

var serverSideSearchTimeOut;
var lastServerSideSearch=null;
function runServerSideSystemSearch(sv, position) {
  try {
    if (false) {
       var searchInputLength = window.HMenuSearch.elem.val().length;
       if (searchInputLength===0 || lastServerSideSearch==sv) return;
    } else {
       if (lastServerSideSearch==sv) return;
    }
    lastServerSideSearch = sv;
    var xmlHttp = getXmlHttp();
    window.rnd = r = window.rnd ? window.rnd+1 : 1;
    var isMercury = ''
    var d = getDocElm("SystemSearchServerRes");
    d.innerHTML = ''
    xmlHttp.open('POST','/ta/Default.ajax?rnd=BHN&@impl=zeyt.ui.search.AjaxControl_ServerSideUserSearch&@windowId=BSDJL&@showStackMB=0&@pushOnStack=0&@noBG=1&@showMB=1'+r,true);
    var postData = 'sv='+escapeStr(sv);

    if (position) {
      postData = postData + '&pos=' + escapeStr(position);
    }

    if (false) {
    xmlHttp.setRequestHeader('X-Container-WindowId',r);
    }
    xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

    xmlHttp.onreadystatechange = function() {
      if (xmlHttp.readyState != 4) {
        return;
      }
      if (xmlHttp.status != 200) {
        return;
      }

      var results = xmlHttp.responseText;

      renderSearchResults(results)
    };
    xmlHttp.send(postData);
  } catch(e) {
    console.error(e)
  }
}
function postMRUSearch() {
}

function hideSystemSearch(event) {
  var target = {};
  if (event) {
    target = event.target || event.srcElement;
  }
  //event.stopPropagation();

  if (parent.frames['ADMIN_MENU']) {
    if (target == parent.frames.ADMIN_MENU.SystemSearch || target == parent.frames.ADMIN_MENU.searchButton ||
    target == parent.frames.ADMIN_MENU.mainMenuL || target == parent.frames.ADMIN_MENU.mainMenuR) {
      // allow clicks in text field on the search icon and the menu scroll arrows
      return;
    }

    if (!$(".headMenuSearchSubWr", parent.frames['ADMIN_MENU'].document).hasClass('collapsed')) {
      $(".headMenuSearchSubWr", parent.frames['ADMIN_MENU'].document).toggleClass('collapsed');
    }
    hideSystemSearchList();
  }
}

function hideSystemSearchList() {
  if (parent.frames['ADMIN_MENU']) {
    if (parent.frames.ADMIN_CENTER.searchDIV) {
      parent.frames.ADMIN_CENTER.searchDIVGray.style.display='none';
      parent.frames.ADMIN_CENTER.searchDIV.style.display='none';
    }
  }
}

var systemSeachHead_Search="Search";
var systemSeachHead_MenuRes="Menu Results";
function performSystemSearch(sv) {
  if (!parent.frames.ADMIN_CENTER.searchDIV) {
    parent.frames.ADMIN_CENTER.searchDIV=parent.frames.ADMIN_CENTER.document.createElement("div");
    parent.frames.ADMIN_CENTER.searchDIV.className='systemSearchTopDIV';
    parent.frames.ADMIN_CENTER.searchDIV.innerHTML="<div class='popUp'><div id='SystemSearchDiv' style='width:300px;height:300px'></div></div>";
    parent.frames.ADMIN_CENTER.document.body.appendChild(parent.frames.ADMIN_CENTER.searchDIV);

    parent.frames.ADMIN_CENTER.searchDIVGray=parent.frames.ADMIN_CENTER.document.createElement("div");
    parent.frames.ADMIN_CENTER.searchDIVGray.className='pageGray pageGrayTOP';
    parent.frames.ADMIN_CENTER.searchDIVGray.style.zIndex=1999;
    parent.frames.ADMIN_CENTER.document.body.appendChild(parent.frames.ADMIN_CENTER.searchDIVGray);
    parent.frames.ADMIN_CENTER.searchDIVGray.onclick=hideSystemSearch;
  }
  parent.frames.ADMIN_CENTER.searchDIVGray.style.display='block';
  parent.frames.ADMIN_CENTER.searchDIV.style.display='block';

  var div=getDocElm("SystemSearchDiv");
  if (div.innerHTML=='') {
    div.innerHTML="<div><div class='heading'>" + parent.frames.ADMIN_MENU_BODY.systemSeachHead_Search+"</div><div id='SystemSearchVal'></div></div><div id='SystemSearchMenuRes'></div><div id='SystemSearchServerRes'></div>";
  }
  var ssv=getDocElm("SystemSearchVal");
  ssv.innerText=sv;
  div.style.display='block';
  setTimeout(function() {runSystemSearch(sv);}, 10);
}

function createSystemSearchMenuArray() {
  var all = parent.frames.ADMIN_MENU_BODY.HM_Array_All.slice(0);
  all.sort();
  var res = [];
  for (var i = 0; i < all.length; i++) {
    var sub = parent.frames.ADMIN_MENU_BODY[all[i]];
    if (!sub) continue;
    for (var j = 1; j < sub.length; j++) {
      if (sub[j][1]=='') continue;
      var o = new Object();
      o.name=sub[j][0];
      o.parent = new Array();
      var me = all[i];
      while (me.lastIndexOf('_')>3) {
        var num = me.substring(me.lastIndexOf('_')+1);
        me = me.substring(0, me.lastIndexOf('_'));
        o.parent[o.parent.length]=parent.frames.ADMIN_MENU_BODY[me][num][0];
      }
      o.parent[o.parent.length]=parent.frames.ADMIN_MENU_BODY.HM_Array_Top[me.substring(8)];
      o.parent=o.parent.reverse();
      o.nameParent=o.parent.join(' > ');
      o.nameParentU=o.parent.join(' ').toUpperCase();
      o.nameU=sub[j][0].toUpperCase();
      o.click=sub[j][1].replace(/javascript:/g,'parent.frames.ADMIN_MENU_BODY.');
      o.searchId=sub[j][6]
      res[res.length]=o;
    }
  }
  parent.frames.ADMIN_MENU_BODY.menuArray=res;
}

addOnKeyDown(
  function(ev) {
    try {
      if (ev.srcElement) {
        if (ev.srcElement.nodeName=='BODY' && ev.keyCode==8) {
          $(window.parent.frames.getFrameByName('ADMIN_MENU_BODY').document).find(".fullPageContainer").trigger("backspacePushed");
          disableEvent(ev);
        }
      } else {
        if (ev.target.nodeName=='BODY' && ev.keyCode==8) {
          $(window.parent.frames.getFrameByName('ADMIN_MENU_BODY').document).find(".fullPageContainer").trigger("backspacePushed");
          disableEvent(ev);
        }
      }
    } catch(e){}

    try {
      if (ev.srcElement.nodeName=='DIV' && ev.keyCode==8) {
        $(window.parent.frames.getFrameByName('ADMIN_MENU_BODY').document).find(".fullPageContainer").trigger("backspacePushed");
        disableEvent(ev);
      }
    } catch(e){}

    try {
      if (ev.srcElement) {
        if (ev.srcElement.nodeName == "A" && ev.keyCode==8) {
          $(window.parent.frames.getFrameByName('ADMIN_MENU_BODY').document.body).find(".backspaceButton").click();
          disableEvent(ev);
        }
      } else {
        if (ev.target.nodeName == "A" && ev.keyCode==8) {
          $(window.parent.frames.getFrameByName('ADMIN_MENU_BODY').document.body).find(".backspaceButton").click();
          disableEvent(ev);
        }
      }
    } catch(e){}
  }
);

try {
  if(parent.frames.ADMIN_CENTER){
    document.onkeydown=fn_top_onkeydown;
    //addOnLoad(setFocusToMainWindow);
  }
  addOnClick(hideCommandDropdown);
  addOnClick(hideSystemSearch);
} catch (e) {
  //can't load, parent has different origin
}


function collapseHeader() {
  var headBodyWidth = $(".headBody").width();
  var links = $(".headBody .links");
  var logoWidth = $(".headBody .logo").outerWidth(true);
  var title = $(".headBody .title");
  var titleWidth = title.outerWidth(true);
  var headNotification = $(".headBody .headNotification");
  var headNotificationWidth = headNotification.outerWidth(true)
  var linksBlockWrapper = $(".headBody .linksBlockWrapper");
  var linksWidth;

  calculateLinksWidth();

  var headElementsWidth = logoWidth + titleWidth + headNotificationWidth + linksWidth;

  function toggleHeader(headBodyWidth) {
    if (headElementsWidth > headBodyWidth) {
      headNotification.addClass("hidden");
      return;
    }

    headNotification.removeClass("hidden");
  }

  function collapseTitle(headBodyWidth) {
    title.addClass("titleCollapsed");
    title.attr("title", title.text());

    var linksWidth = links.outerWidth(true) + 30;

    if (logoWidth + titleWidth + linksWidth > headBodyWidth) {
      var newTitleWidth = headBodyWidth - logoWidth - linksWidth;
      title.css("max-width", newTitleWidth);
      return;
    }

    title.removeClass("titleCollapsed");
    title.css("max-width", "100%");
    title.attr("title", "");
  }


  function calculateLinksWidth() {

    if (!false) {
      var linksList = $(".headBody .linksList");
      var linksListWidth = 1;

      linksList.find("li").each(function(index, elem) {
        linksListWidth += $(elem).outerWidth(true);
      });

      linksList.width(linksListWidth);
      links.css("min-width", linksListWidth);
      linksWidth = linksListWidth;
    }
  }

  // init function
  toggleHeader(headBodyWidth);
  collapseTitle(headBodyWidth);
  $(window).on("resize", function() {
    var headBodyWidth = $(".headBody").width();

    toggleHeader(headBodyWidth);
    collapseTitle(headBodyWidth);
  });
}


$(document).ready(function () {
// search
    $( ".headMenuSearchWr #searchButton" ).click(function() {
        $(".headMenuSearchSubWr").toggleClass('collapsed');
        if ($(".headMenuSearchSubWr").hasClass('collapsed')) {
            hideSystemSearchList();
        } else {
            setTimeout($("#SystemSearch").focus(),100);
         }

        if (typeof checkMenu == 'function') {
            checkMenu();
        }
    });
});

function updateHeaderPhoto() {
  try {
    var menu = window.parent.frames.HAMBURG_MENU;
    if(isNull(menu)) {
        return;
    }
    var elem = menu.getDocElm('employeeHeaderPhoto');
    if(isNull(elem)) {
        return;
    }

    var xmlHttp = getXmlHttp();
    window.rnd = r = window.rnd ? window.rnd+1 : 1;

    xmlHttp.open('GET','/ta/Default.ajax?rnd=LEU&@impl=zeyt.web.AjaxControl_HeaderPhoto&@windowId=ILYIC&@showStackMB=0&@pushOnStack=0&@noBG=1&@showMB=1'+r,true);

    if (false) {
        xmlHttp.setRequestHeader('X-Container-WindowId',r);
    }
    xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');

    xmlHttp.onreadystatechange = function() {
        if (xmlHttp.readyState != 4 || xmlHttp.status != 200) {
            return;
        }
        elem.innerHTML = xmlHttp.responseText;
    };
    xmlHttp.send();
  } catch (e) {}
}















function doRepAction() {
  adminTheFormSubmit();
}

if(isNull(document.REPORTS)){
 document.REPORTS = new Object();
}
function Report(data){
 for(i in data){
  this[i]=data[i];
 }
 this.window = window.self;
}
new Report();
var EMPTY_REPORT = new Object();

function FakeForm(){
}

Report.prototype.addProperties=function(data) {
 for(i in data){
  this[i]=data[i];
 }
}

Report.prototype.setCheckPageChanges=function(bDoCheck) {
  this.chkChanges = bDoCheck;
}

Report.prototype.ajaxDefaultClearMessage=true;

Report.prototype.doAjaxRepAction=function(clrMessages, callback) {
  var bIsCheckPageChanges = adminIsCheckPageChanges();
  var bNeedsSaving = adminNeedsSaving;

  if (bIsCheckPageChanges && !isNull(this.chkChanges)) {
    if (this.chkChanges == 0) {
      adminSetNeedSaving(false);
      adminCheckPageChanges(false);
    }
  }
  var ret;

  if (this.ajax) {
    if (isNull(clrMessages)) {
      clrMessages = this.ajaxDefaultClearMessage;
    }
    var objProg = getDocElm('RepProg' + this.id);
    if (objProg) {objProg.style.display='block';}
    var _id=this.id;
    var currentCallback =callback;
    $(".js-graphic-report").addClass('loader');
    if (!callback) {
      callback=function() {
        showLoader(getDocElm('RepTblData_' + _id), false);
      };
    } else {
      callback=function() {
        currentCallback();
        showLoader(getDocElm('RepTblData_' + _id), false);
      };
    }

    showLoader(getDocElm("RepTblData_" + this.id), true);
    ret = doAjaxAction("UPDATE_REPORT:" + this.reportId+'|'+this.subId, this.id, this.reportURI, false, clrMessages, null, callback);
  } else {
    ret = doRepAction();
  }

  if (bIsCheckPageChanges && !isNull(this.chkChanges)) {
    if (this.chkChanges == 0) {
      adminSetNeedSaving(bNeedsSaving);
      adminCheckPageChanges(true);
    }
  }

  return ret;
}

Report.prototype.scrollTopIntoView=function(){
  getDocElm('Rep_' + this.id).scrollIntoView();
}

Report.prototype.getReportDIV=function(){
  return getDocElm('Rep_' + this.id);
}

Report.prototype.getHeader=function(){
  return getDocElm('RepHead' + this.id);
}
Report.prototype.getHeaderFloat=function(){
  return getDocElm('RepHeadFloat' + this.id);
}
Report.prototype.getSelectors=function(){
  return getDocElm('RepHeadSelector' + this.id);
}
Report.prototype.getPagination=function(){
  return getDocElm('ReportPagination' + this.id);
}

// Filter Toggle
Report.prototype.filterToggle=function() {
  var reportToolbarId = "#ReportToolbar" + this.id;
  var extraFilters = $("#RepHeadSelector" + this.id + " .extraFilters");
  var filterRow = $(reportToolbarId + " .filterRow");
  var reportFilter = $(reportToolbarId + " .reportFilter");

  var active = false;
  var extraFiltersLength = extraFilters.length;
  var filterRowLength = filterRow.length;
  var reportFilterLength = reportFilter.length;
  var i;

  for(i = 0; i <= reportFilterLength; i++){
    if (reportFilter[i]) {
      if ($(reportFilter[i]).hasClass("active")) {
        active = true;
      }
    }
  }

  if (active) {
    for(i = 0; i <= reportFilterLength; i++){
      if (reportFilter[i]) {
        $(reportFilter[i]).removeClass("active");
      }
    }

    for(i = 0; i <= extraFiltersLength; i++){
      if (extraFilters[i]) {
        $(extraFilters[i]).removeClass("active");
      }
    }

    TheForm[this.selectorVisible].value=0;
  } else {
    for(i = 0; i <= reportFilterLength; i++){
      if (reportFilter[i]) {
        $(reportFilter[i]).addClass("active");
      }
    }

    for(i = 0; i <= extraFiltersLength; i++){
      if (extraFilters[i]) {
        $(extraFilters[i]).addClass("active");
      }
    }

    TheForm[this.selectorVisible].value=1;
  }
  if ($('body').hasClass('schedulePlanner')) {
    tableColumnReposition.checkLeftColumns = true;
    tableColumnReposition.scrollDirection = 'Y';
    tableColumnReposition.leftDivReposition();
  }
}

Report.prototype.findForm=function(){
 if(!isNull(this.form)){
  return this.form;
 }
 if(!isNull(document.forms[this.id])){
  this.form = document.forms[this.id];
  return this.form;
 }
 for(var i=0; i<document.forms.length; i++){
  var _form = document.forms[i];
  if(!isNull(_form.elements[this.action])){
   this.form = _form;
   return this.form;
  }
 }
 this.form = new FakeForm();
 return this.form;
}
Report.prototype._submitForm=function(_action,_reset,clrMessages,callback){
 var _form = this.findForm();
 _form.elements[this.action].value = _action;
 return this.doAjaxRepAction(clrMessages,callback);
}
Report.prototype.run=function(callback){
 var _form = this.findForm();
 if (_form.elements[this.pageNumber]) {
   _form.elements[this.startRow].value = _form.elements[this.pageNumber].value;
 }

 this._submitForm("RUN", null, null, callback);
}
Report.prototype.refresh=function(clrMessages){
 this._submitForm("refreshRep",true,clrMessages);
}
Report.prototype.prevPage=function(){
 this._submitForm("prevPage",true);
}
Report.prototype.nextPage=function(){
 this._submitForm("nextPage",true);
}
Report.prototype.handleKey=function(e){
  if (e.keyCode==13) {
    this.run();
    return false;
  }
  return true;
}

Report.prototype.moveToRecord=function(_row){
 var _form = this.findForm();
 _form.elements[this.startRow].value = _row;
 _form.elements[this.action].value = "goToRow";
 return this.doAjaxRepAction();
}

Report.prototype.goToPageNum=function(_row){
 var _form = this.findForm();
 _form.elements[this.startRow].value = _row;
 _form.elements[this.action].value = "goToPage";
 return this.doAjaxRepAction();
}

Report.prototype.clear=function(){
 var _form = this.findForm();
 for(i in this.col){
   var col = this.col[i];
   if(col.filterOp)clearComponent(_form.elements[col.filterOp]);
   if(col.filterValue)clearComponent(_form.elements[col.filterValue]);
 }
}
Report.prototype.exportTo=function(_t,_type){
  var _form = this.findForm();
 _form.elements[this.action].value = "EXPORT";
 _form.elements[this.actionParam].value = 'xml';
 this.showPopup2(_t,this.functionUrl,550,655,false,'Export Report',true,"AUTO");
 _form.elements[this.action].value = "RUN";
}
Report.prototype.print=function(){
}

Report.prototype.collapseClicked=function(clrMessages){
 var v=TheForm[this.collapseState].value;
 var img = getDocElm(this.filterCollapse);
 var row = getDocElm(this.filterRow);
 if (v==1) {
  TheForm[this.collapseState].value=0;
  row.className='filterRow';
  $(row).parents('#reportHeaders').parent().removeClass('collapsedRow');
  $(row).parents('div.reportTable').find('.filterRow').removeClass('collapsedRow');
 } else {
  TheForm[this.collapseState].value=1;
  row.className='filterRow collapsedRow';
  $(row).parents('#reportHeaders').parent().addClass('collapsedRow');
  $(row).parents('div.reportTable').find('.filterRow').addClass('collapsedRow');
 }
}

Report.prototype.saveTestParams=function(_t){
 var _form = this.findForm();
  _form.elements[this.action].value="TEST_SAVE_SETTINGS";
  this.showPopup2(_t,this.functionUrl,600,445,false,'Save Report Test Settings',true,"AUTO");
}

Report.prototype.viewDebugInfo=function(_t){
 var _form = this.findForm();
  _form.elements[this.action].value="VIEW_DEBUG_INFO";
  this.showPopup2(_t,this.functionUrl,750,300,false,'Debug Info',true,"AUTO");
}

Report.prototype.viewDebugQueries=function(_t){
var _form = this.findForm();
_form.elements[this.action].value="ViewDebugQueries";
this.showPopup2(_t,this.functionUrl,1024,768,false,'Debug Queries',true,"AUTO");
}

Report.prototype.testFilters=function(){
 var _form = this.findForm();
 _form.elements[this.actionTest].value = "TEST_FILTERS";
 _form.elements[this.action].value = "RUN";
 return this.doAjaxRepAction();
}

Report.prototype.testSort=function(){
 var _form = this.findForm();
 _form.elements[this.actionTest].value = "TEST_SORT";
 _form.elements[this.action].value = "RUN";
 return this.doAjaxRepAction();
}

Report.prototype.sortBy=function(_col,_asc,_top,_event){
 var _second = window.event && (window.event.ctrlKey || window.event.shiftKey || window.event.metaKey);
 var _form = this.findForm();
 _form.elements[this.startRow].value = 0;
 _form.elements[this.action].value = "RUN";
 _form.elements[this.col[_col].sortOrder].value = _asc;
 _form.elements[this.col[_col].sortPos].value=_second?-98:-99;
 return this.doAjaxRepAction();
}
Report.prototype.groupBy=function(_obj,_level){
 if(isNaN(_level)){
  _level = -1;
 }
 var _form = this.findForm();
 _form.elements[this.startRow].value = 0;
 _form.elements[this.action].value = "RUN";
 _form.elements[this.obj[_obj].group].value = _level;
 return this.doAjaxRepAction();
}

Report.prototype.hideCol=function(_col){
 var _form = this.findForm();
 _form.elements[this.action].value = "RUN";
 _form.elements[this.col[_col].pos].value = -1;
 return this.doAjaxRepAction();
}

Report.prototype.saveSettings=function(_t, asNew){
  var _form = this.findForm();
  _form.elements[this.action].value="SETTINGS_SAVE";
  _form.elements[this.actionParam].value = asNew;
  this.showPopup2(_t,this.functionUrl,400,340,false,'Save Report Settings',true,"AUTO");
}
Report.prototype.loadSavedSettings=function(_t){
  this.showPopup(_t,'/ta/Default.admin?rnd=DXR&@impl=zeyt.report.webview.UiControl_SavedSettingLookup&@windowId=DGNKE&@showStackMB=0&@pushOnStack=0&@noBG=1&@showMB=1',900,600,false,'Lookup Saved Report Settings',false);
}

Report.prototype.selectColumnsPrompt=function(_t){
  var _form = this.findForm();
  _form.elements[this.action].value='COLUMNS_LOOKUP';
  this.showPopup2(_t,this.functionUrl,950,500,false,'Select Report Columns',true,"NO");
}

Report.prototype.runReportWriter=function(_t){
  var _form = this.findForm();
  _form.elements[this.action].value='CUSTOM_SETTINGS';
  this.showPopup2(_t,this.functionUrl,1000,800,false,'Custom Settings',true,"NO");
}

Report.prototype.showCustomFilter=function(_t) {
  var _form = this.findForm();
  _form.elements[this.action].value='CUSTOM_FILTER';
  this.showPopup2(_t,this.functionUrl,1000,800,false,'Custom Filter',true,"NO");
}

Report.prototype.showPopup2=function(_t,_uri,_w,_h,_scroll,_title,_submitTo, scroll){
  if(_submitTo){
  }else{
    _uri += '&$reportSubId=' + this.subId + '&$reportPageId=' + this.id + '&$reportId=' + TheForm[this.reportId].value + '&$reportURI=' + TheForm[this.reportURI].value;
  }
  this.window.showPopUp({
     w:_w,
     h:_h,
     title:_title,
     url:_uri,
     src:_t,
     post:1,
     center:1
    });
}

Report.prototype.showPopup=function(_t,_uri,_w,_h,_scroll,_title,_submitTo){
  var _form = this.findForm();
  if(!_submitTo){
    var param = new Object();
    param.$reportPageId = this.id;
    param.$reportId = _form[this.reportId].value;
    param.$reportSubId = this.subId;
    param.$reportURI = _form[this.reportURI].value;

    this.window.showPopUp({
     w:_w,
     h:_h,
     title:_title,
     url:_uri,
     exParams:param,
     src:_t,
     center:1
    });
  }else{
    this.window.showPopUp({
     w:_w,
     h:_h,
     title:_title,
     url:_uri,
     src:_t,
     post:1,
     center:1
    });
  }
}

Report.prototype.selectColumns=function(_columns){
 var _form = this.findForm();
 _form.elements[this.action].value="SELECT_COLUMNS";
 _form.elements[this.actionParam].value=_columns;
  return this.doAjaxRepAction();
}
Report.prototype.updateSettings=function(_str){
 var _form = this.findForm();
 _form.elements[this.action].value="UPDATE_SETTINGS";
 _form.elements[this.actionParam].value=_str;
  return this.doAjaxRepAction();
}
Report.prototype.runWithSettings=function(_sId){
 var _form = this.findForm();
 _form.elements[this.action].value="RUN_WITH_SETTINGS";
 _form.elements[this.actionParam].value=_sId;
 return this.doAjaxRepAction();
}
Report.prototype.menuBarSelect=function(elm){
  var _form = this.findForm();
  showPopUp({gray:0,center:0,pos:'bottom-full',srcElement:elm,w:158,h:0,url:'/ta/Default.admin?rnd=WCQ&@impl=zeyt.report.webview.UiControl_ReportOptionsMB&@windowId=MRUCD&@showStackMB=0&@pushOnStack=0&@noBG=1&@showMB=0&@NoBody=1&$reportPageId='+this.id+'&$reportSubId='+this.subId+'&$reportId='+_form[this.reportId].value+'&$reportURI='+_form[this.reportURI].value + '&rnd=' + Math.random()});
}
Report.prototype.showGroupBySettings=function() {
 var _form = this.findForm();
 _form.elements[this.groupBySettingsVisible].value = 1;
 _form.elements[this.action].value = "RUN";
 return this.doAjaxRepAction();
}
Report.prototype.hideGroupBySettings=function() {
 var _form = this.findForm();
  _form.elements[this.groupBySettingsVisible].value = 0;
 _form.elements[this.action].value = "RUN";
 return this.doAjaxRepAction();
}

function findReport(token) {
 var report = document.REPORTS[""+token];
 if(report){
  return report;
 }
 if(!isNaN(token)){
 }
 var reportId = null;
 if(token && token.tagName){
   var elm = token;
   while (true){
    if(isNull(elm)){
     reportId = null; break;}
    if(elm.tagName.toLowerCase()=="div" && !isNull(elm.attributes.getNamedItem('reportId'))){
     reportId = elm.attributes.getNamedItem('reportId').nodeValue; break; }
    if(elm.tagName.toLowerCase()=="form"){
     for(r in document.REPORTS){
      if(document.REPORTS[r].findForm()==elm){return document.REPORTS[r];}
     }
    }
    elm = elm.parentNode;
   }
 }
 var report = null;
 if(reportId!=null){report = document.REPORTS[reportId]; }
 if(report==null){for(r in document.REPORTS){return document.REPORTS[r];} }
 return report==null?EMPTY_REPORT:report;
}
function reportRun(t, callback){findReport(t).run(callback);return false;}
function reportPrevPage(t){findReport(t).prevPage(); return false;}
function reportNextPage(t){findReport(t).nextPage(); return false;}
function reportCollapseClicked(t){findReport(t).collapseClicked(); return false;}
function reportHandleKey(t, e){return findReport(t).handleKey(e);}
function reportClear(t){findReport(t).clear(); return false;}
function reportExport(t){findReport(t).exportTo(t,'xml'); return false;}
function reportPrint(t){findReport(t).print(); return false;}
function reportMoveToRecord(t,i){findReport(t).moveToRecord(i); return false;}
function reportSortBy(t,_col,_asc,_top){findReport(t).sortBy(_col,_asc,_top); return false;}
function reportGroupBy(t,col,order){findReport(t).groupBy(col,order); return false;}
function reportHideCol(t,col){findReport(t).hideCol(col); return false; }

function reportTestFilters(t){findReport(t).testFilters(); return false;}
function reportTestSort(t){findReport(t).testSort(); return false;}

function reportSaveTestParams(t){findReport(t).saveTestParams(t); return false;}

function reportViewDebugInfo(t){findReport(t).viewDebugInfo(t); return false;}
function reportViewDebugQueries(t){findReport(t).viewDebugQueries(t); return false;}

function reportSettings(t){findReport(t).settings(); return false;}
function reportSaveSettings(t,asNew){findReport(t).saveSettings(t,asNew); return false; }
function reportSelectColumns(t,_cols){findReport(t).selectColumns(_cols); return false; }
function reportSelectColumnsPrompt(t){findReport(t).selectColumnsPrompt(t); return false; }
function reportRunReportWriter(t){findReport(t).runReportWriter(t); return false; }
function reportShowCustomFilter(t){findReport(t).showCustomFilter(t); return false; }
function reportLoadSavedSettings(t){findReport(t).loadSavedSettings(t); return false; }
function reportRunWithSettings(t,sId){findReport(t).runWithSettings(sId); return false; }
function reportMenuBarSelect(t){findReport(t).menuBarSelect(t); return false; }
function reportSaveSettingsAsDefault(t){findReport(t).saveSettings(t,'default'); return false; }
function reportGoToPage(t,value) {findReport(t).goToPageNum(value); return false; }
function hideGroupBySettings(t) {findReport(t).hideGroupBySettings();return false;}
function showGroupBySettings(t) {findReport(t).showGroupBySettings();return false;}

function xy(o) {
  if(!isNull(o.href) && o.href != '#' && o.href.toUpperCase().indexOf('JAVASCRIPT')==-1) {
    if (o.href.indexOf("&prevScreenX=") != -1) {
      o.href = o.href.substring(0, o.href.indexOf("&prevScreenX="));
    }


    var scroll = getPageReportScroll();

    o.href = o.href + "&prevScreenX=" + scroll.x + "&prevScreenY=" + scroll.y;
  }
}

function xy2(o) {
  if(!isNull(o)) {
    if (o.indexOf("&prevScreenX=") != -1) {
      o = o.substring(0, o.indexOf("&prevScreenX="));
    }

    var scroll = getPageReportScroll();
    o = o + "&prevScreenX=" + scroll.x + "&prevScreenY=" + scroll.y;
  }
  return o;
}
function viewReportSetting(sId){
  return showPopUp({w:700, h:500, url:'/ta/Default.admin?rnd=QJG&@impl=zeyt.report.webview.UiControl_ViewReportSetting&@windowId=PUVKP&@showStackMB=0&@pushOnStack=0&@noBG=1&@showMB=1&SettingId='+sId});
}


function Rep_moveAllChildren(_from,_to,_appendWhere,_tagName,_checkField){
  var l = new Array();
  var _f = _from.getElementsByTagName(_tagName);
  for(var j=0; j<_f.length; j++){
   var _el = _f[j];
   if (_checkField && isNull(_el.getAttribute(_checkField))) {
     _el.setAttribute(_checkField,'1');
   }
   if(_checkField && _el.getAttribute(_checkField)==0){
     continue;
   }
   l[l.length] = _el;
  }
  for(var j=0; j<l.length; j++){
   _to.appendChild(l[j]);
  }
}

function Rep_getReportSettingsForm(){
  return document.forms[0];
}

function Rep_selectAvailableColumns(){
  var colFilter = getDocElm('AvailableColFilter');
  if (colFilter  == null  || trim(colFilter.value) == ''){
     Rep_selectAllColumns();
     return false;
  }
  var colFilterTxt = trim(colFilter.value);
  var colFilterTxts = colFilterTxt.split(' ');
  for(var i=0; i<colFilterTxts.length; i++){
    colFilterTxts[i] = trim(colFilterTxts[i]);
    colFilterTxts[i] = colFilterTxts[i].toUpperCase();
  }
  var l = new Array();
  var d = getDocElm('availableColumnsDiv');
  var _f = d.getElementsByTagName('div');
  for(var i=0; i<_f.length; i++){
    var dTxt = getDocElm(_f[i].id+'_TXT');
    var dTxtValue = getInnerText(dTxt).toUpperCase();
    if(Rep_isStrMatch(colFilterTxts,dTxtValue)){
        l[l.length] = _f[i];
    }
  }
  var d3 = getDocElm('selectedColumnsDiv_hidden');
  var e3 = d3.getElementsByTagName('div');
  for(var j=0; j<l.length; j++){
         getDocElm('availableColumnsDiv_hidden').appendChild(l[j]);
         for(var k=0; k<e3.length; k++){
             var s = e3[k].id.replace("sel", "");
             var t = l[j].id.replace("avl", "");
             if (s==t){
                 getDocElm('selectedColumnsDiv').appendChild(e3[k]);
                 break;
             }
        }
  }
  Rep_updateSelectedColumnsField();
  return false;
}

function Rep_selectAllColumns(){
  Rep_moveAllChildren(getDocElm('selectedColumnsDiv_hidden'),getDocElm('selectedColumnsDiv'),'beforeEnd','div');
  Rep_moveAllChildren(getDocElm('availableColumnsDiv'),getDocElm('availableColumnsDiv_hidden'),'beforeEnd','div');
  Rep_updateSelectedColumnsField();
  return false;
}

function Rep_removeAllColumns(){
  Rep_moveAllChildren(getDocElm('selectedColumnsDiv'),getDocElm('selectedColumnsDiv_hidden'),'beforeEnd','div','canRemoveColumn');
  Rep_moveAllChildren(getDocElm('availableColumnsDiv_hidden'),getDocElm('availableColumnsDiv'),'beforeEnd','div');
  Rep_updateSelectedColumnsField();
  if (TheForm.AvailableColFilter.value != '') {
    TheForm.AvailableColFilter.value='';
    Rep_updateAvailableColumns();
  }
  return false;
}

function Rep_moveColumnUp(_b){
  Rep_moveItemsUp(getDocElm('selectedColumnsDiv'),_b);
  Rep_updateSelectedColumnsField();
  return false;
}

function Rep_moveColumnDown(_b){
  Rep_moveItemsDown(getDocElm('selectedColumnsDiv'),_b);
  Rep_updateSelectedColumnsField();
  return false;
}

function Rep_getReportSettingsColumns(){
  var colIds = new Array();
  var _f = getDocElm('selectedColumnsDiv').getElementsByTagName('div');
  for(var i=0; i<_f.length; i++){
    var s = _f[i].getAttribute('columnIndex');
    colIds[colIds.length] = escapeStr(s);
  }

  var sColIds = colIds.join("&");
  return sColIds;
}

function Rep_aC(_divId){
  var _avlDiv = getDocElm('avlCol_'+_divId);
  var _selDiv = getDocElm('selCol_'+_divId);
  getDocElm('availableColumnsDiv_hidden').appendChild(_avlDiv);
  getDocElm('selectedColumnsDiv').appendChild(_selDiv);
  _selDiv.isSelected=true;
  _selDiv.className='selectedColumn_Selected';
  Rep_updateSelectedColumnsField();
  return false;
}

function Rep_remC(_divId){
  var _selDiv = getDocElm('selCol_'+_divId);
  var _avlDiv = getDocElm('avlCol_'+_divId);
  getDocElm('selectedColumnsDiv_hidden').appendChild(_selDiv);
  getDocElm('availableColumnsDiv').appendChild(_avlDiv);
  Rep_updateSelectedColumnsField();
  return false;
}

function Rep_selectedFieldUnselectAll(){
 var _f = getDocElm('selectedColumnsDiv').getElementsByTagName('div');
 for(var i=0; i<_f.length; i++){
   _f[i].isSelected=false;
   _f[i].className='selectedColumn';
 }
}

function Rep_selCMD(_dId){
  var _d = getDocElm('selCol_'+_dId);
  event.cancelBubble=true;
  event.returnValue=false;
  var _wasSelected = _d.isSelected?true:false;
  if(event.altKey){}
  if(event.shiftKey){}
  if(!event.ctrlKey){
    Rep_selectedFieldUnselectAll();
  }
  _d.isSelected=!_wasSelected;
  if(_d.isSelected) {
    _d.className='selectedColumn_Selected';
  } else {
   _d.className='selectedColumn';
  }
  return false;
}

function Rep_avlCMD(){
  event.cancelBubble=true;
  event.returnValue=false;
  return false;
}

function Rep_moveItemsDown(_list,_b){
  event.cancelBubble=true;
  event.returnValue=false;
  var _f = _list.getElementsByTagName('div');
  var _l = _f.length;
  if(_l<2)return;
  for(var i=_l-2; i>=0; i--){
    if(_f[i].isSelected) {
      var moveBy = 1;
      if(_b && i>0){
        moveBy = 1+(_l-i)>>1;
      }
      for(;moveBy>0 && _f[i+moveBy].isSelected; moveBy--);
      if(moveBy==0)continue;
      if(i+moveBy+1>=_f.length){
        _list.appendChild(_f[i]);
      }else{
        _list.insertBefore(_f[i],_f[i+moveBy+1]);
      }
    }
  }
}

function Rep_moveItemsUp(_list,_b){
  event.cancelBubble=true;
  event.returnValue=false;
  var _f = _list.getElementsByTagName('div');
  if(_f.length<2)return;
  for(var i=1; i<_f.length; i++){
    if(_f[i].isSelected) {
      var moveBy = 1;
      if(_b)moveBy += i>>1;
      for(;moveBy>0 && _f[i-moveBy].isSelected; moveBy--);
      if(moveBy==0)continue;
      if(i-moveBy>=_f.length){
        _list.appendChild(_f[i]);
      }else{
        _list.insertBefore(_f[i],_f[i-moveBy]);
      }
    }
  }
}

function Rep_isStrMatch(strs,s) {
 var startIndex = 0;
 for(var i=0; i<strs.length; i++){
   if(strs[i].length==0)continue;
   startIndex = s.indexOf(strs[i],startIndex);
   if(startIndex==-1){
     return false;
   }
   startIndex+=strs[i].length;
 }
 return true;
}

function Rep_processOnKeyDown(e) {
 var iKeycode = getEventKeyCode(e);
 if (iKeycode != 13) {
   return true;
 }
 event.cancelBubble=true;
 return false;
}

function Rep_updateAvailableColumns() {
 var colFilter = getDocElm('AvailableColFilter');
 var colFilterTxt = trim(colFilter.value);
 var colFilterTxts = colFilterTxt.split(' ');
 for(var i=0; i<colFilterTxts.length; i++){
   colFilterTxts[i] = trim(colFilterTxts[i]);
   colFilterTxts[i] = colFilterTxts[i].toUpperCase();
 }

 var d = getDocElm('availableColumnsDiv');
  var _f = d.getElementsByTagName('div');
  for(var i=0; i<_f.length; i++){
    var dTxt = getDocElm(_f[i].id+'_TXT');
    var dTxtValue = getInnerText(dTxt).toUpperCase();
    if(Rep_isStrMatch(colFilterTxts,dTxtValue)){
      _f[i].setAttribute("filtered",false);
      _f[i].style.display='block';
    }else{
      _f[i].setAttribute("filtered",true);
      _f[i].style.display='none';
    }
  }
}

function Rep_updateSelectedColumnsField() {
  var sColIds = Rep_getReportSettingsColumns();
  var colIdField = TheForm.SelectedColumnIds;
  colIdField.value=sColIds;
}



function Rep_WriteAvailCol(d) {
  var sb = new StringBuffer(d.length*400);
  for (i=0; i < d.length; i++) {
    var colId = "avlCol_" + d[i].k;
    sb.append("<div ");
    sb.append("class='availableColumn'");
    sb.append(" id='");
    sb.append(colId);
    sb.append("'>");
    sb.append("<table cellspacing=0><tr>");
    sb.append("<td width='100%' ");
    sb.append(" id='");
    sb.append(colId);
    sb.append("_TXT'");
    sb.append(" onmousedown='return Rep_avlCMD()'>");
    sb.append(d[i].l);
    sb.append("</td>");
    sb.append("<td>");
    sb.append("<span class='icon-to_10 pointer' title='");
    sb.append("Add");
    sb.append("' onClick='return Rep_aC(\"" + d[i].k + "\")'><!-- --></span>");
    sb.append("</td>");
    sb.append("</tr></table>");
    sb.append("</div>");
  }
  document.write(sb.toString());
}

function Rep_WriteSelCol(d) {
  var sb = new StringBuffer(d.length*530);
  for (i=0; i < d.length; i++) {
    var colId = "selCol_" + d[i].k;
    sb.append("<div");
    if (!d[i].cr) {
      sb.append(" canRemoveColumn='0'");
    }
    sb.append(" columnIndex='");
    sb.append(d[i].ci);
    sb.append('\'');
    sb.append(" class='selectedColumn'");
    sb.append(" id='");
    sb.append(colId);
    sb.append("'>");

    sb.append("<table cellspacing=0><tr>");
    sb.append("<td>");
    if (d[i].cr) {
      sb.append("<span class='icon-back_10 pointer' title='");
      sb.append("Remove");
      sb.append("' onclick='return Rep_remC(\"" + d[i].k + "\")'><!-- --></span>");
    } else {
      sb.append("<span class='icon-back_10 disabledIcon' title='");
      sb.append("Remove");
      sb.append("'><!-- --></span>");
    }
    sb.append("</td>");
    sb.append("<td width=100% nowrap onmousedown='return Rep_selCMD(\"" + d[i].k + "\")'>");
    sb.append(d[i].l);
    sb.append("</td>");
    sb.append("</tr></table>");
    sb.append("</div>");
  }
  document.write(sb.toString());
}

function Rep_initDivStyle() {

  var lc = getDocElm('visibleAvailableItemsScrollDiv');
  var rc = getDocElm('visibleSelectedItemsScorllDiv');

  var d = getWindowDim();

  var pos = getObjPos(lc);
  var $multiBox = $('.multiBox');
  var paddings = 0;
  if ($multiBox.length != 0) {
    paddings = 30;
  }
  var height=(d.h-getFloatMenuHeight()-pos.y-5 - paddings);
  lc.style.height=height + "px";
  rc.style.height=height + "px";
}

function Rep_delayInitStyle() {
 setTimeout('Rep_initDivStyle()',25);
}

function Rep_checkSubBoxes(field) {
  var fs = field.value.split('|');
  var index = parseInt(fs[0]);
  var level = parseInt(fs[1]);
  var started = false;
  var finished = false;
  for (var i = 0; i < TheForm.elements.length; i++) {
    var el = TheForm.elements[i];
    if (el.type == 'checkbox') {
      if (el.name != 'GROUP_CHK') {
        if (started && !finished) {
          el.checked = field.checked;
        }
      } else {
        var vs = el.value.split('|');
        var v = parseInt(vs[0]);
        var l = parseInt(vs[1]);
        if (started && !finished && l > level) el.checked = field.checked;
        if (v == index) {
          started = true;
        } else if (v > index && l == level) {
          finished = true;
        }
      }
    }
  }
}


function closeDropdowns() {
  var dropdownToggle = $(".dropdown_toggle");
  var allDropdownMenus = $(".dropdown_menu");

  for (var i = 0; i < dropdownToggle.length; i++) {

    if ($(dropdownToggle[i]).hasClass("open")) {
      $(dropdownToggle[i]).removeClass("open");
    }
  }

  for (var j = 0; j < allDropdownMenus.length; j++) {
    if ($(allDropdownMenus[j]).hasClass("open")) {
      $(allDropdownMenus[j]).removeClass("open");
    }
  }
}

// Dropdown
function dropDown(elem, event) {
  var dropdownToggleText = elem.firstElementChild;
  var dropdownMenu = elem.nextElementSibling;

  event.stopPropagation();

  document.onclick = function(event) {
    closeDropdowns();
  }

 var $elem = $(elem);

  if (!$elem.hasClass("open")) {
    closeDropdowns();
    $elem.addClass("open");
  } else {
    $elem.removeClass("open");
  }

  dropdownMenu.onclick = function(event) {
    var e = event || document.event;
    var target = e.target;
    var parentElem = target.parentElement;

    if (target.className == "dropdown_menu_link") {
      var clickedText = target.innerHTML;
      dropdownToggleText.innerHTML = clickedText;
      $(parentElem).addClass("selected");
    }

    $(elem).removeClass("open");
  };
}


// change dropdown toggler text if page is reloaded
function changeDropdownText(id) {
  var wrapper = document.getElementById(id);
  var dropDown = wrapper.getElementsByClassName("custom_dropdown")[0];
  var dropdownToggleText = dropDown.getElementsByClassName("dropdown_toggle_text")[0].innerHTML;
  var dropdownMenuLinks = dropDown.getElementsByClassName("dropdown_menu_link");
  var dropdownMenuLinksLength = dropdownMenuLinks.length;
  var i;
  var currentLink;

  for (i = 0; i < dropdownMenuLinksLength; i++) {
    currentLink = dropdownMenuLinks[i];

    if (currentLink.innerHTML == dropdownToggleText) {
      $(currentLink.parentElement).addClass("selected");
    }
  }
}

// Standart Dropdown
function standartDropDown(elem, event) {
  var dropdownMenu = elem.nextElementSibling;

  event.stopPropagation();

  var parentScrollingBlock = parentHasClass(elem, "scrollingBlock");
  var fullPageContainer = parentHasClass(elem, "fullPageContainer");

  document.onclick = function(event) {
    closeDropdowns();
  }

  var $elem = $(elem);
  if (!$elem.hasClass("open")) {
    closeDropdowns();
    $elem.addClass("open");
  } else {
    $elem.removeClass("open");
  }

  if (parentScrollingBlock && fullPageContainer) {
    var parentInfoBoxHeight = parentScrollingBlock.offsetHeight;
    var parentInfoBoxTop = parentScrollingBlock.getBoundingClientRect().top;
    var dropdownToggleHeight = elem.offsetHeight;
    var dropdownMenuParams = dropdownMenu.getBoundingClientRect();
    var dropdownMenuHeight = dropdownMenuParams.height;
    var remainSpace = parentInfoBoxHeight + parentInfoBoxTop - dropdownMenuParams.top;

    if (dropdownMenuHeight > remainSpace) {
      dropdownMenuHeight = remainSpace - 20;

      dropdownMenu.style.height = dropdownMenuHeight + "px";
    }
  }

  dropdownMenu.onclick = function() {
    $(elem).removeClass("open");
  };
}

function parentHasClass(elem, clsName) {
  do {
    if (classControl.hasClass(elem, clsName)) {
      return elem;
    }

    elem = elem.parentElement;
  } while (elem);

  return false;
}

function isOneReportTablePage() {
  return !!($('#globalWrap').length || $('.payStatement').length || $('.globalTblRqd').length || ($('div.reportTable').length === 1 && $('div.report').parent().parent().attr('id') === 'PAGE_BODY'));
}

function showLoader(divReportTable, isVisible) {
  // divReportTable - JS object
  // isVisible - boolean value:
  //              true - loader is visible
  //              false - loader is hidden
  var leftPos, topPos;
  var ua = window.navigator.userAgent;
  var $divReportTable = $(divReportTable);
  var $tdReportTable = $divReportTable.parent();
  var $loaderIcon = $tdReportTable.find('.loaderIcon');

  if ($tdReportTable.parent().attr('id') == 'reportTableRow') {
    if (isVisible) {
      if (ua.indexOf("MSIE ") > 0 || !!navigator.userAgent.match(/Trident.*rv\:11\./)) {
        leftPos = $tdReportTable.scrollLeft() + ($tdReportTable.width() / 2);
        topPos = $tdReportTable.scrollTop() + ($tdReportTable.height() / 2);
        $loaderIcon.css({
          'left': leftPos,
          'top': topPos
        });
        $tdReportTable.addClass('loader-ie');
        $divReportTable.height( $tdReportTable.height() );
      } else {
        $tdReportTable.addClass('loader');
      }
    } else {
      var removeAutoWidth = function() {
        $tdReportTable.removeClass("autoWidth");
      }
      $tdReportTable.removeClass('loader loader-ie').addClass('autoWidth');
      setTimeout(removeAutoWidth, 1);
    }
  } else {
    if (isVisible) {
      $divReportTable.parents('.scrollingBlock').addClass('formLoader');
    } else {
      $divReportTable.parents('.scrollingBlock').removeClass('formLoader');

      // show scroll bar for IE
      if (isIE() || isMsIE11()) {
        var reportTable = $divReportTable.find('table.reportTable');
        reportTable.width(reportTable.width() - 1);

        setTimeout(function() {
          reportTable.width(reportTable.width() + 1);
        }, 1);
      }
    }
  }
};


function toggleUseCustomFilter(fieldId, t) {
  var hidden = TheForm[fieldId];
  if (hidden.value==0) {
    hidden.value=1;
  } else {
    hidden.value=0;
  }
  return reportRun(t);
}

function enableFullScreen() {
  var fullScreenToggle = $('.fullScreenToggle');
  if (fullScreenToggle.length > 0) {
    fullScreenMode.init();
    $('.fullScreenToggle').removeClass('hidden');
  }
}

function globalTable(doTable, singleWidget, delta){
	var $globalTable = $('#globalWrap');
	var proceedWithoutGlobalWrap = function() {
		globalWrap.showHiddenReport();
		$('.dailySchedule .rfc').wrap('<div class="scrollingBlock"></div>');
	};
	var globalWrap = {
		$reportTable: $('#PAGE_BODY table.reportTable'),
		$reportTableThead: $('#PAGE_BODY table.reportTable > thead'),
		$reportTableTbody: $('#PAGE_BODY table.reportTable > tbody'),
		$scrollingBlock: null,
		colGroup: '<colgroup></colgroup>',
		reportTableWidth: null,
		scrollingDelta: (typeof delta !== 'undefined') ? delta : 1,
		init: function () {
			var self = this;
			var $images = self.$reportTableTbody.find('img');
			var loadedImagesQty = 0;
			var length = $images.length;

			var setImageSize = function (image) {
				loadedImagesQty++;
				$(image).attr('width', $(image).width()).attr('height', $(image).height());
				if (loadedImagesQty === length) {
					self.initGlobalTable();
				}
			};

			var waitForImages = function () {
				var alreadyLoaded = 0;
				var loaded = [], temporary = [];

				if (length < 1) {
					self.initGlobalTable();
					return;
				}

				function load(image) {
					setImageSize(image);
					$(image).trigger("load");
				}

				function loadHandler() {
					var img = $(this).data('originalImage') || this;
					if ($.inArray(img, loaded) === -1) {
						loaded.push(img);
					}
					if (loaded.length + alreadyLoaded >= length) {
						$images.off('load', loadHandler);
						$images.off('error', errorHandler);
						temporary.forEach(function (temp) {
							temp.off('load', loadHandler);
							temp.off('error', errorHandler);
						});
						loaded.forEach(function (loadedImg) {
							load(loadedImg);
						});
					}
				}

				function errorHandler() {
					var img = $(this).data('originalImage') || this;
					var xhr = new XMLHttpRequest();
					xhr.onreadystatechange = function () {
						if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
							$(img).replaceWith($('<img/>').attr('src', URL.createObjectURL(xhr.response)));
							load(img);
						}
					};
					xhr.open('GET', img.src, true);
					xhr.responseType = 'blob';
					xhr.setRequestHeader('Cache-Control', 'no-cache');
					xhr.setRequestHeader('Pragma', 'no-cache');
					xhr.send();
				}

				return $images
					.off('load', loadHandler)
					.off('error', errorHandler)
					.each(function () {
						if (this.complete) {
							alreadyLoaded++;
							load(this);
						} else {
							if (this.src.lastIndexOf('/') === this.src.length - 1) {
								load(this);
							} else {
								var $tempImg = $('<img/>');
								temporary.push($tempImg);
								$tempImg.on('load', loadHandler);
								$tempImg.on('error', errorHandler);
								$tempImg.data('originalImage', this);
								$tempImg.attr('src', this.src);
							}
						}
					});
			};

			if (isMsIE11()) {
				waitForImages();
			} else {
				if (length > 0) {
					$images.each(function () {
						if (this.complete) {
							setImageSize(this);
						} else {
							this.addEventListener('load', function () {
								setImageSize(this);
							});
						}
					})
				} else {
					self.initGlobalTable();
				}
			}
		},
		initGlobalTable: function() {
			var isMinimizedReportTbl = $(this.$reportTable).parents('.reportStyleTable').hasClass('minimizedReportTbl');

			this.setColumnWidths();
			this.$reportTable.parent().addClass($('#PAGE_BODY').attr('class'));

			if ($globalTable.length) {
				this.updateGlobalTable();
			} else {
				this.createGlobalTable();
			}

			if (isMinimizedReportTbl) $('#reportHeadersRow, #reportTableRow').addClass('minimizedReportTbl');
			if ($('#globalWrap').length) {
				$('#reportTableRow .reportTableWrap').append($('.controlElm').detach());
				$('.controlElm select').attr('ctrl-elm', true);
			}
			enableFullScreen();
			this.determineScrollingBlock();
			this.scrollToCurrentPosition();
			this.scrollHeaders();
			this.scrollEvent();
			this.resizeEvent();
			this.addFunctionality();

			this.showHiddenReport();

			$('#reportTableRow > td').removeClass('loader loader-ie');
		},
		setColumnWidths: function() {
			var $theadTds = this.$reportTable.find('.headerRow > td');
			var columns = '<colgroup>';

			this.reportTableWidth = this.$reportTable.outerWidth() - 2;

			this.$reportTable.css({
				'min-width': this.reportTableWidth,
				'width': '100%'
			});

			$theadTds.each(function(i) {
				var cellWidth = $(this).outerWidth();
				columns += ($theadTds.length !== (i + 1)) ? '<col width="' + cellWidth + '">' : '<col width="100%">';
			});
			columns += '</colgroup>';

			this.colGroup = columns;
		},
		appendElements: function() {
			$('#noResultRow > td').append(this.$reportTable.find('.noResult'));
			$('#reportTableRow > td').append(this.$reportTable.parent()).append('<div class="loaderIcon"></div><div class="minHeight"></div>');
			$('#reportTableRow table.reportTable').wrap('<div class="reportTableWrap"></div>');

			$('#reportHeaders > table').css('min-width', this.reportTableWidth);
		},
		addFunctionality: function() {
			var $toggleText = $('#headTableRow .custom_dropdown .dropdown_toggle_text');
			if ($toggleText.width() == 100) $toggleText.attr('title', $toggleText.text());
		},
		createGlobalTable: function() {
			var onkeydown = this.$reportTable.attr('onkeydown');
			$globalTable = $('<table id="globalWrap"><tbody><tr id="headTableRow"><td></td></tr></tbody></table>');

			this.$reportTable.prepend(this.colGroup);

			$('[name="TheForm"] > *').wrapAll($globalTable);
			$('#globalWrap > tbody')
				.append('<tr id="reportHeadersRow"><td><div id="reportHeaders"><table onkeydown="' + onkeydown + '"></table></div></td></tr>')
				.append('<tr id="reportTableRow"><td></td></tr>');

			this.$reportTableThead.append('<tr id="noResultRow"><td></td></tr>');
			$('#reportHeaders > table')
				.css('table-layout', 'auto') //fixing of the bug in safari
				.addClass(this.$reportTable.attr('class'))
				.append(this.colGroup)
				.append(this.$reportTableThead)
				.css('table-layout', 'fixed'); //fixing of the bug in safari

			this.appendElements();
		},
		updateGlobalTable: function() {
			if (this.$reportTable.length) {
				this.$reportTable.prepend(this.colGroup);

				this.$reportTableThead.append('<tr id="noResultRow"><td></td></tr>');
				$('#reportHeaders > table')
					.css('table-layout', 'auto') //fixing of the bug in safari
					.attr('class', this.$reportTable.attr('class'))
					.html(this.$reportTableThead.detach())
					.prepend(this.colGroup)
					.css('table-layout', 'fixed'); //fixing of the bug in safari

				$('#reportTableRow > td')
					.html(this.$reportTable.parent().detach());

				this.appendElements();
			}
		},
		determineScrollingBlock: function() {
			var $scrollingBlock = $('#reportTableRow div.reportTable');

			this.$scrollingBlock = ($scrollingBlock.css('overflow') === 'visible') ? $scrollingBlock.parent() : $scrollingBlock;
			this.$scrollingBlock.addClass('scrollingReport');
		},
		scrollToCurrentPosition: function() {
			var scrollTop = $('#reportTableRow').attr('data-scroll-top');
			var scrollLeft = $('#reportTableRow').attr('data-scroll-left');
			if (!scrollTop) scrollTop = 0;
			if (!scrollLeft) scrollLeft = 0;

			if (scrollTop) this.$scrollingBlock.scrollTop(scrollTop);
			if (scrollLeft) this.$scrollingBlock.scrollLeft(scrollLeft);
		},
		scrollHeaders: function() {
			var $reportHeadersTable = $('#reportHeaders > table');
			var headerTableMinWidth = parseInt($reportHeadersTable.css('min-width'));
			var widthAndScroll = $('#reportHeaders').innerWidth() + this.$scrollingBlock.scrollLeft();

			if (widthAndScroll > headerTableMinWidth) {
				$reportHeadersTable.css('min-width', widthAndScroll);
			} else {
				if (headerTableMinWidth != this.reportTableWidth && widthAndScroll <= this.reportTableWidth + 1) {
					$reportHeadersTable.css('min-width', $('#reportTableRow table.reportTable').css('min-width') ); // using of min-width css, it needs for IE
				}
			}

			$('#reportHeaders').scrollLeft(this.$scrollingBlock.scrollLeft());
		},
		scrollEvent: function() {
			var self = this;
			var events, isHeadersScroll = false, isDropdownClosed = false;

			events = $._data(this.$scrollingBlock.get(0), 'events');
			if (events && events.scroll) {
				var eventsLength=events.scroll.length;
				for (var i = 0; i < eventsLength; i++) {
					if (events.scroll[i].namespace === 'headers') {
						isHeadersScroll = true;
						break;
					}
				}
			}

			if (!isHeadersScroll) {
				this.$scrollingBlock.off('scroll.headers').on('scroll.headers', function() {
					if (!isDropdownClosed) {
						isDropdownClosed = true;
						self.closeDropdowns();
						setTimeout(function() {isDropdownClosed = false;}, 1000);
					}

					self.scrollHeaders();
				});
			}

			$('#reportHeaders').off('scroll.scrolledHeader').on('scroll.scrolledHeader', function() {
				var scrollLeft = -($('table.reportTable', this).position().left - self.scrollingDelta);

				if (self.$scrollingBlock.scrollLeft() != scrollLeft) {
					self.$scrollingBlock.scrollLeft( scrollLeft );
				}
			});

			this.$scrollingBlock.off('scroll.position').on('scroll.position', function() {
				$('#reportTableRow').attr({
					'data-scroll-top': $(this).scrollTop(),
					'data-scroll-left': $(this).scrollLeft()
				})
			});
		},
		resizeEvent: function() {
			var $titleItems, reportToolBarWidth;
			var delta = 20;
			var $reportToolBar = $('#headTableRow .reportToolBar');
			var $textItems = $reportToolBar.find('.itemName, .standart_dropdown span.dropdown_toggle_text, .reloadButton > span');
			var leftSideWidth = $reportToolBar.find('.leftSide').width();
			var panelWidth = $reportToolBar.find('.settingsPanel').width();
			var limitWidth = leftSideWidth + panelWidth + delta;

			var checkSettingsPanel = function() {
				reportToolBarWidth = $reportToolBar.width();

				if (limitWidth < reportToolBarWidth && $reportToolBar.hasClass('minimizedPanel')) {
					$reportToolBar.removeClass('minimizedPanel');
					$titleItems.attr('title', '');
				}
				if (limitWidth >= reportToolBarWidth && !$reportToolBar.hasClass('minimizedPanel')) {
					$reportToolBar.addClass('minimizedPanel');
					$titleItems.each(function(){
						$(this).attr('title', $(this).attr('data-title'));
					});
				}
			};

			$textItems.each(function(){
				$(this).parents('a').addClass('addedTitle').attr('data-title', $(this).text());
			});
			$titleItems = $reportToolBar.find('.addedTitle');

			checkSettingsPanel();

			$(window).off('resize.settingsPanel').on('resize.settingsPanel', checkSettingsPanel);
		},
		closeDropdowns: function() {
			closeDropdowns();
			$('.cbOuterDiv:visible').hide();
		},
		showHiddenReport: function() {
			$('.hiddenReport').removeClass('hiddenReport');
		}
	};

	if (isOneReportTablePage() || singleWidget) {
		if (doTable) {
			globalWrap.init();
		} else {
			fixedTitleHeader.init(true);
			proceedWithoutGlobalWrap();
		}
	} else {
		proceedWithoutGlobalWrap();
	}
};

function changeGlobalTableColumnWidth(select) {
	var col, colWidth, tableMinWidth, diff;
	var tables = document.querySelectorAll('table.reportTable');
	var textWidth = select.nextElementSibling.querySelector('.dropdown_toggle_text').offsetWidth;

	for (var i = 0; i < 2; i++) {
		tableMinWidth = $(tables[i]).css('min-width');
		col = tables[i].querySelectorAll('col')[select.getAttribute('cell-index')];
		colWidth = col.getAttribute('width');
		diff = textWidth + 60 - colWidth;

		if (diff > 0) {
			col.setAttribute('width', textWidth + 60);
			$(tables[i]).css('min-width', parseInt(tableMinWidth) + diff);
		} else {
			i = 2;
			textWidth = 0;
			continue;
		}
	}
	if (textWidth) {
		select.parentNode.style.width = textWidth + 40 + 'px';
	}
};

	/** START ADMIN_HEAD_DROPDOWN.JS **/

var headDropDowns = {
	BORDER : 1,
		
  	hideAll : function() {
		 this.hideOne('headDropDownName');
		 this.hideOne('headDropDownAdmin');
		 this.hideOne('headDropDownEIN');
		 var doc = (((parent || {}).frames || {}).ADMIN_MENU || {}).document;
		 $(doc).find(".links li").removeClass('activeTab sel2');  	
  	},
 
  	hideOne : function(idToHide)  {
		var doc = (((parent || {}).frames || {}).ADMIN_MENU || {}).document;
		if (doc) {
			var elem = doc.getElementById(idToHide);
			if (elem) {
				elem.className='';
				elem.style.display='none';
			}
		}  		
  	},

  	dropDownClicked : function(elmAId, dropDownId) {
		var elmA = getDocElm(elmAId);
		var elm = getDocElm(dropDownId);
		if ($(elmA).hasClass('sel2')) {
		  this.hideAll();
		  return;
		}
		
		this.hideAll();		
		elmA.className='activeTab sel2';

		elm.style.display='block';
		if (elm.offsetWidth<elmA.offsetWidth) {
		   elm.style.width=elmA.scrollWidth-this.BORDER + "px";
		}
		var left=getObjPos(elmA).x+this.BORDER;//1 px for border.
		elm.style.top=getObjPos(elmA).y+elmA.offsetHeight-20 + "px";

		var visibleScreenWidth=pageWidth();
		if (visibleScreenWidth <= left + $(elm).outerWidth()) {
			var right = visibleScreenWidth-left-$(elmA).outerWidth();
			elm.style.right=right+this.BORDER + "px";// 1px for border
			$(elm).addClass("right");
		} else {
		  elm.style.left=left + "px";
		}
  	},

  	einClicked : function () {
  		this.dropDownClicked('headDropDownEINA', 'headDropDownEIN');
  	},

  	nameClicked : function() {
  		this.dropDownClicked('headDropDownNameA', 'headDropDownName');
  	},

  	adminClicked : function () {
  		this.dropDownClicked('headDropDownAdminA', 'headDropDownAdmin');
  	},
  	
  	onClickHandler: function(e,self) {
		e = e || window.event;
		var target = e.target || e.srcElement;
		
		var isCanSkip = function(obj) {
			var id = obj.id;
			var jObj = $(obj);
			return (id=='headDropDownNameA' || id=='headDropDownAdminA' || id=='headDropDownEINA') && jObj.hasClass('activeTab');
		}
		
		if (isCanSkip(target)) {
  			return;
		}
		
		var parent = target.parentNode;
		if (parent && isCanSkip(parent)) {
			return;
		}
		
		self.hideAll();
  	},
  	
  	recalculatePositionOfOpenedDropDowns : function() {
  		var activeTabs = $(".links li.activeTab");
  		if (!activeTabs || activeTabs.length==0) {
  			return;
  		}
  		
  		this.hideAll();
  		activeTabs.removeClass("activeTab");
  		var tabsLength = activeTabs.length;
  		for (var i = 0; i < tabsLength; i++) {
  			if (activeTabs[i].onclick) {
  				activeTabs[i].onclick();
  			}
  		}  		
  	},

  	init : function () {
  		var self = this;
  		addOnClick(function(e) {
  			self.onClickHandler(e, self);
  		});
  		addOnResize(function() {
  			self.recalculatePositionOfOpenedDropDowns();
  		});
  	}
  	
};
headDropDowns.init();

/** END ADMIN_HEAD_DROPDOWN.JS **/


function canAccessWindow(w) {
  if (!w) {
    return false;
  }
  try {
    return w.document.location.host === window.document.location.host
           && w.document.location.protocol === window.document.location.protocol;
  } catch (e) {
    return false; //cross-domain access denied
  }
}

function getTopWindow(includeOpener) {
  var w = window || {};
  var frames = w.frames || [];
  while (!w.IsTopFrame && !frames.ADMIN_MENU) {
    if (canAccessWindow(w.parent) && w.parent !== w) {
      w = w.parent;
      continue;
    }
    if (includeOpener && canAccessWindow(w.opener) && w.opener !== w) {
      w = w.opener;
      continue;
    }
    break;
  }
  return w;
}

function StringBuffer(_sz){
  this._size = 0;
  this.buffer = new Array(isNaN(_sz)?0:parseInt(_sz));
}
new StringBuffer(0);
StringBuffer.prototype.append = function(){
  if(arguments.join != this._undef){
    this.buffer[this._size] = arguments.join("");
    this._size++;
  }else{
      for(var i=0; i<arguments.length; i++ ){
      this.buffer[this._size] = arguments[i];
      this._size++;
    }
  }
  return this;
}
StringBuffer.prototype.write = StringBuffer.prototype.append;

StringBuffer.prototype.size = function(){
  return this._size;
}
StringBuffer.prototype.toString = function(){
  var str = this.buffer.join("");
  this.clear();
  this.append(str);
  return str;
}
StringBuffer.prototype.clear = function(){
  for(var i=this._size-1; i>=0; i--){
    this.buffer[i] = null;
  }
  this._size=0;
}

StringBuffer.prototype.flush = function(){
    var str = this.toString();
    document.write(str);
    this.clear();
}

function getTextTD(tr, val, colSpan, className) {
  var td = tr.insertCell(-1);
  if (!isNull(colSpan) && colSpan > 1) {
    td.colSpan=colSpan;
  }
  if (!isNull(className)) {
    td.className=className;
  }
  td.appendChild(document.createTextNode(val));
  return td;
}

function getSPAN(val, className) {
  var span = document.createElement('SPAN');
  if (!isNull(className)) {
    span.className=className;
  }
  span.appendChild(document.createTextNode(val));
  return span;
}

function getDIV(val, className) {
  var div = document.createElement('DIV');
  if (!isNull(className)) {
    div.className=className;
  }
  div.appendChild(document.createTextNode(val));
  return div;
}

function addElmEventListener(elm, ee, func) {
  if(window.addEventListener){
    elm.addEventListener (ee, func, false);
  } else {
    ee = 'on' + ee;
    elm.attachEvent (ee, func);
  }
}

/** START COMBOX **/
if (isNull(window.comboBoxes)) {
  window.comboBoxes = new Array();
}

function getNameValueList(l) {
  if(!isNull(l) && l.getLength){
    return l;
  }
  return new NameValueList(l);
}

function NameValueList(namesAndValuesList) {
  this.mySort=compareTuplesByNone;
  this.l = [];
  this.m = {};
  if(namesAndValuesList){
    this.addItems(namesAndValuesList);
  }
}
NameValueList.prototype.isBlank = function(i) {
  return (i<this.l.length) ? this.l[i][2] : null;
}
NameValueList.prototype.getName = function(i) {
  return (i<this.l.length) ? this.l[i][0] : null;
}
NameValueList.prototype.getValue = function(i) {
  return (i<this.l.length) ? this.l[i][1] : null;
}
NameValueList.prototype.getLength = function(i) {
  return this.l.length;
}
NameValueList.prototype.clear = function(i) {
  this.l = [];
  this.m = {};
}
NameValueList.prototype.addItem = function(item,bSort) {
  if(this.m[item[1]]){
    return false;
  }
  this.l[this.l.length] = item;
  this.m[item[1]] = item;
  if(bSort){
     this.sortItems();
  }
  return true;
}
function compareTuples(a, b){
  if(a[2]>b[2])return -1;
  if(a[0]>b[0])return 1;
  if(a[0]<b[0])return -1;
  if(a[1]>b[1])return 1;
  if(a[1]<b[1])return -1;
  return 0;
}

function compareTuplesByValue(a, b){
  if(a[2]>b[2])return -1;
  if(a[1]>b[1])return 1;
  if(a[1]<b[1])return -1;
  return 0;
}

function compareTuplesByValueNum(a, b){
  return a[1]-b[1];
}

function compareTuplesByValueDesc(a, b){
  if(a[2]>b[2])return -11;
  if(a[1]>b[1])return -1;
  if(a[1]<b[1])return 1;
  return 0;
}
function compareTuplesByNameDesc(a, b){
  if(a[2]>b[2])return -1;
  if(a[0]>b[0])return -1;
  if(a[0]<b[0])return 1;
  return 0;
}

function compareTuplesByNone(a, b){
  return 0;
}

NameValueList.prototype.sortItems = function() {
  if (this.mySort === compareTuplesByNone) {
    return;
  }
  this.l.sort(this.mySort);
}

NameValueList.prototype.addItems = function(items) {
 for(var j=0; j<items.length; j++){
   this.addItem(items[j],false);
 }
 this.sortItems();
}

NameValueList.prototype.getItem = function(i) {
  return (i<this.l.length) ? this.l[i] : null;
}
NameValueList.prototype.getValue_Last = function() {
  return (this.l.length>0) ? this.l[this.l.length-1][1] : null;
}
NameValueList.prototype.startLoad = function() {
  this.status = 'Loading';

}
NameValueList.prototype.endLoad = function() {
  this.status = 'Loaded';
}


function ComboBox(id, namesAndValuesList, valRequired, newValuesOk,height, fontSize) {
  var cmbId = window.comboBoxes.length;
  window.comboBoxes[cmbId] = this;

  this.matchType = 1;
  this.comboId = cmbId;
  var oTextBox1 = document.getElementsByName(id + "_DISP");
  if (oTextBox1.length > 0) {
    this.oTextbox = oTextBox1[0];
  }
  else {
    this.oTextbox = TheForm[id + "_DISP"];
  }

  // fix: if there are several fields with the same name (some are hidden), don't use text field not hidden
  if (typeof this.oTextbox.length !== "undefined") {
    for (var i=0; i<this.oTextbox.length; i++) {
      if (this.oTextbox[i].type == "text") {
        this.oTextbox = this.oTextbox[i]
      }
    }
  }

  if( !isNull(height) ) {
    this.oTextbox.style.height = height;
  }
  if( !isNull(fontSize) ) {
    this.oTextbox.style.fontSize = fontSize;
  }

  this.oTextbox.ComboBox=this;

  var self = this;

 // this.oTextbox.setValueFromLookup = function(_v,_v2) { self.setValueFromLookup(_v,_v2); };
  this.oHidden = TheForm[id];
  this.oHidden.setValueFromLookup = function(_v,_v2) { self.setValueFromLookup(_v,_v2); };
  this.setupHiddenVal = this.oHidden.value;
  this.setupDisplayVal = this.oTextbox.value;
  this.setValue(this.oTextbox.value, this.oHidden.value);
  this.id = id;
  this.innerDivCache = new Object();
  this.iOffsetSides = 1;
  this.aInitialList = getNameValueList(namesAndValuesList);
  this.setNumItemsVisible(5);
  this.setUpDownDoesNotStartEdit(false);
  this.setShowOnFocus(true);

  if (this.aInitialList != null && this.aInitialList.getLength() > 0) {
     this.iSuggestListLength = this.aInitialList.getLength();
  }

  this.selectedItem = null;
  this.iSelectedId = -1;
  this.bOuterDivIsVisible = false;
  this.oTextbox.AllowUpDownKeyboardNavig=true;
  this.oTimeoutId = null;
  this.sSelectionId = null;
  this.lastKeycode = null;

  this.bValueRequired = isNull(valRequired)?true:valRequired;
  this.bNewValuesOk = isNull(newValuesOk)?false:newValuesOk;
  this.onClick_OUTSIDE = function(e) { if (!e) e=window.event; self.processOutsideClick(e); };

  if (isPageLoaded()) {
    this.createOuterDiv();
  } else {
    addOnDomRendering(function() { self.createOuterDiv(); });
  }
  addOnClick(this.onClick_OUTSIDE);
  
  this.closeIfScrollBlock();
}

ComboBox.prototype.removeFromPage = function(e) {

}
ComboBox.prototype.setValueFromLookup = function(v1,v2) {
  if(this.aInitialList.addItem([v2,v1]),true){
  }
  this.setValue(v2,v1);
  this.fireOnChange(1);
}

ComboBox.prototype.processOutsideClick = function(e) {
  var src = e.srcElement;

  if (!src || !this.eOuterDiv) {
   return;
  }
  if (src == this.eOuterDiv) {
    return;
  } else if (src.parentElement == this.eOuterDiv) {
    return;
  } else if (src == this.oTextbox) {
    return;
  } else if ($(src).prev().length !=0 && $(src).prev()[0] == this.oTextbox) {
	return;
  }
  this.txtBoxOnBlurAfterTimeOut();
}

ComboBox.prototype.setValue = function(disp, hidden) {
  this.oTextbox.value=disp;
  this.setHiddenValue(hidden,1);
  this.originalDisp = disp;
  this.originalHidden = hidden;
  this.sLastSuggest = this.oTextbox.value;
  this.sLastSuggestId = this.oHidden.value;
}

ComboBox.prototype.getValue = function() {
  return this.oHidden.value;
}

ComboBox.prototype.setValueByHidden = function(hidden, bFireOnChange) {
  var disp = "";
  for (var i=0; i < this.aInitialList.getLength(); i++){
    if (this.aInitialList.getValue(i) == hidden) {
      disp = this.aInitialList.getName(i);
      break;
    }
  }
  this.oTextbox.value=disp;
  this.setHiddenValue(hidden,1);
  this.originalDisp = disp;
  this.originalHidden = hidden;
  if (bFireOnChange) {
    this.fireOnChange(5);
  } else {
    this.setupHiddenVal=hidden;
  }
}

ComboBox.prototype.setHiddenValue = function(hidden, loc) {
  if (isNull(this.originalHidden)) {
    this.originalHidden = this.oHidden.value;
  }
  var changed = this.oHidden.value!=hidden;
  this.oHidden.value=hidden;
  return changed;
}

ComboBox.prototype.setMatchType = function(type) {
  this.matchType = type;
}

ComboBox.prototype.setNumItemsVisible = function(n) {
  this.iOuterDivHeight = 30*n; // 30 - height of the item
  this.numVisible = n;
}

ComboBox.prototype.setUpDownDoesNotStartEdit = function(b) {
  this.upDownDoesNotStartEdit = b;
}

ComboBox.prototype.setShowOnFocus = function(b) {
  this.showOnFocus = b;
}

ComboBox.prototype.clearList = function() {
  this.aInitialList.clear();
  this.eOuterDiv.innerHTML='';
  this.innerDivCache = new Object();
  this.setValue('','');
}

ComboBox.prototype.setList = function(l, selId) {
  //this.hideOuterDiv();
  this.aInitialList.clear();
  if (isNull(this.eOuterDiv)) {
    this.createOuterDiv();
  }
  if(this.eOuterDiv) {
    this.eOuterDiv.innerHTML='';
  }
  this.innerDivCache = new Object();
  this.aInitialList.addItems(l);
  if (isNull(selId)) {
    selId = "";
  }
  this.innerDivsCreated = false;
  var self = this;
  var timeoutFunc = function() {
    self.createInnerDivs();
    if (selId != '') {
      self.highlightNewSuggestion(selId,true,true,12);
    }
  };
  timeoutFunc();
  window.setTimeout(timeoutFunc, 10);
}

ComboBox.prototype.createOuterDiv = function() {
  try {
    this.eOuterDiv = document.createElement("DIV");
    this.eOuterDiv.id="eOuterDiv_" + this.comboId;
    this.eOuterDiv.className='cbOuterDiv';
    this.eOuterDiv.onselectstart = function() { return false; };
    this.eOuterDiv.tabIndex = 0; //enables focus
    this.eOuterDiv.style.outline = 'none'; //removes focus outline
    this.eOuterDiv.hideFocus = true; //removes focus outline (IE 7)

    this.setOuterDivSize();
    //this.createInnerDivs();
    document.body.appendChild(this.eOuterDiv);

    var self = this;

    addOnResize(function(e) { if (!e) e=window.event; self.resizeHandler(e); });

    var $oTextbox = $(this.oTextbox);
    $oTextbox.next("div").click(function() {
		if (self.toggleOuterDiv()) {
			$oTextbox.focus();
			self.txtBoxOnFocus(null, false);
		}
	});

    this.oTextbox.onblur     = function(e) { if (!e) e=window.event; self.txtBoxOnBlur(e); };
    this.oTextbox.onclick    = function(e) { if (!e) e=window.event; self.txtBoxOnFocus(e, true);stopBubble(e); };
    this.oTextbox.onkeyup    = function(e) { if (!e) e=window.event; self.txtBoxOnKeyUp(e); };
    this.oTextbox.onkeydown  = function(e) { if (!e) e=window.event; return self.txtBoxOnKeyDown(e); };
    this.oTextbox.onpaste    = function(e) { if (!e) e=window.event; self.lastKeycode=9; self.suggestAsTypedTO(); };

    this.eOuterDiv.onfocus   = function(e) { if (!e) e=window.event; self.divOnFocus(e); return false; };
    this.eOuterDiv.onblur    = function(e) { if (!e) e=window.event; self.txtBoxOnBlur(e); };
    this.eOuterDiv.onkeyup   = function(e) { if (!e) e=window.event; self.txtBoxOnKeyUp(e); };
    this.eOuterDiv.onkeydown = function(e) { if (!e) e=window.event; self.txtBoxOnKeyDown(e); };
 } catch (e) {}
}

ComboBox.prototype.toggleOuterDiv = function() {
	 var od = getDocElm("eOuterDiv_" + this.comboId);
	 if (!isNull(od)) {
		 if (od.style.display === 'block') {
			 this.hideOuterDiv();
			 return false;
		 } else {
			 this.showOuterDiv();
			 return true;
		 }
	 }
}

ComboBox.prototype.showOuterDiv = function() {
	if (this.oTextbox.readOnly) {
		return;
	}
	this.createInnerDivs();
	this.setOuterDivSize();
	this.bOuterDivIsVisible = true;
	this.oTextbox.AllowUpDownKeyboardNavig=false;
	if (ComboBox.prevVisibleId >= 0) {
		window.comboBoxes[ComboBox.prevVisibleId].txtBoxOnBlurAfterTimeOut();
	}

	var od = getDocElm("eOuterDiv_" + this.comboId);
	if (!isNull(od) && !isNull(od.style)) {
		od.style.display = "block";
		od.scrollTop = 0;
	}

	this.closeDropdowns();
	$("body").addClass("comboboxOpened");

	this.selectNewSuggestion();
}

ComboBox.prototype.selectNewSuggestion = function() {

	this.displaySuggestList(this.aInitialList, 1);

	this.createInnerDivs();

	ComboBox.prevVisibleId = this.id;

	if (this.oHidden.value) {
		this.iSelectedId = this.oHidden.value;
		this.highlightNewSuggestion(this.iSelectedId, false, true, 1);
		if (this.getInnerDivItem(this.iSelectedId)) {
			this.sLastSuggest = this.getInnerDivItem(this.iSelectedId).value;
		}
		this.sLastSuggestId = this.iSelectedId;
	} else {
		this.highlightNewSuggestion("", false, true, 1);
	}
}

ComboBox.prototype.closeDropdowns = function() {
  var allNewSelects = $(".dropdown .dropdown_toggle");
  var allDropdownMenus = $(".dropdown_menu");

  allNewSelects.each(function(index, elem) {
    var currentToggle = $(elem);

    if (currentToggle.hasClass("open")) {
      currentToggle.removeClass("open");
    }
  });

  allDropdownMenus.each(function(index, elem) {
    var currentMenu = $(elem);

    if (currentMenu.hasClass("open")) {
      currentMenu.removeClass("open");
    }
  });
};

ComboBox.prototype.hideOuterDiv = function() {
  this.bOuterDivIsVisible = false;
  this.oTextbox.AllowUpDownKeyboardNavig=true;
  var od = getDocElm("eOuterDiv_" + this.comboId);
  if (!isNull(od) && !isNull(od.style)) {od.style.display="none";}
  $("body").removeClass("comboboxOpened");
}

ComboBox.prototype.resizeHandler = function(e) {
  this.hideOuterDiv();
}

ComboBox.prototype.setOuterDivSize = function() {
  var scrolledBlock = this.parentHasClass(this.oTextbox, "scrollable");
  var divS = this.eOuterDiv.style;
  if (this.isFixedParent()) {
   this.eOuterDiv.className='cbOuterDivFixed';
   var pos = getObjPos(this.oTextbox);

   if (isIE()) {
     divS.left=pos.x+getPageX() + "px";
     divS.top=pos.y+this.oTextbox.offsetHeight-1+getPageY() + "px";
   } else {
     divS.left=pos.x + "px";
     divS.top=pos.y+this.oTextbox.offsetHeight-1 + "px";
   }
   if(scrolledBlock) {
    divS.top=this.oTextbox.getBoundingClientRect().top + this.oTextbox.offsetHeight +"px";
   }
   divS.width='auto';
   divS.minWidth=this.calculateWidth()+"px";
   divS.height=(this.iOuterDivHeight)+"px";
   divS.textAlign=this.oTextbox.style.textAlign;
  }else {
   this.eOuterDiv.className='cbOuterDiv';
   var offSet=$(this.oTextbox).offset();
   divS.left=offSet.left+"px";
   divS.width='auto';
   divS.minWidth=this.calculateWidth()+"px";
   divS.height=(this.iOuterDivHeight)+"px";
   divS.textAlign=this.oTextbox.style.textAlign;
   topToUse = offSet.top + this.oTextbox.offsetHeight-1;
   endOfBox = (this.iOuterDivHeight+20)+topToUse;
   if (endOfBox>posBottom()) {
     topToUse = offSet.top - this.iOuterDivHeight - 2
   }

   if(scrolledBlock) {
    divS.top=this.oTextbox.getBoundingClientRect().top + this.oTextbox.offsetHeight + window.pageYOffset +"px";
   } else {

    if (topToUse < 0) {
      divS.height = this.iOuterDivHeight + topToUse + "px";
      topToUse = 0;
    }

    divS.top=topToUse +"px";
   }
  }
}
ComboBox.prototype.parentHasClass = function(elem, clsName) {
  do {
    if (classControl.hasClass(elem, clsName)) {
      return elem;
    }

    elem = elem.parentElement;
  } while (elem);

  return false;
}
ComboBox.prototype.closeIfScrollBlock = function() {
  var scrollingBlock = $(".scrollable");
  var openedComboboxes;
  var body = $("body");

  scrollingBlock.on("scroll", function() {
    openedComboboxes = $(".cbOuterDiv");
    openedComboboxes.hide();
  });

  $(window).on("scroll", function() {
    openedComboboxes = $(".cbOuterDiv");

    if (body.hasClass("comboboxOpened")) {
      openedComboboxes.hide();
      body.removeClass("comboboxOpened");
    }
  });
}
ComboBox.prototype.isFixedParent = function() {
  if (this.calcedFixedParent) {
    return this.parentIsFixed;
  }
  this.parentIsFixed=false;
  var o = this.oTextbox;
  while( !isNull(o) ){
    if(!isNull(o.style)&&o.style.position=='fixed'){
      this.parentIsFixed=true;
      break;
    }

    try {
      if(o==o.offsetParent){
        break;
      }
      o = o.offsetParent;
    } catch (e) { o = null; }
  }
  this.calcedFixedParent=true;
  return this.parentIsFixed;
}


ComboBox.prototype.calculateWidth = function() {
  var w;
  if (HM_IE){
    w = this.oTextbox.offsetWidth;
  } else {
    w = this.oTextbox.offsetWidth - this.iOffsetSides*2;
  }
  if(this.showLeftScroller){
    w = w + 4;
  }
  return w+2;
}


ComboBox.prototype.calculateOffsetLeft = function(inputFld) {
  return this.calculateOffset(inputFld,"offsetLeft");
}

ComboBox.prototype.calculateOffsetTop = function(inputFld) {
  return this.calculateOffset(inputFld,"offsetTop","scrollTop");
}

ComboBox.prototype.calculateOffset = function(inputFld,attr, attr2) {
  var cumulativeOffset=0;
  while (inputFld) {
    cumulativeOffset += inputFld[attr];
    if (attr2 && inputFld[attr2]) {
      if (inputFld.nodeName == 'DIV') {
        cumulativeOffset -= inputFld[attr2];
      }
    }
    if (inputFld.nodeName == 'FIELDSET' && attr=='offsetLeft') {
      cumulativeOffset += 2;
    }
    inputFld=inputFld.offsetParent;
  }
  return cumulativeOffset;
}

ComboBox.prototype.getSelectedItem = function() {
  return this.selectedItem;
}

ComboBox.prototype.setSelectedId = function(selId) {
	this.selectedItem = this.innerDivCache[selId];
}

ComboBox.prototype.getInnerDivItem = function(itemId) {
  return this.innerDivCache[itemId];
}

ComboBox.prototype.createInnerDivs = function() {

  if (this.innerDivsCreated) {
    return;
  }
  this.innerDivsCreated = true;

  var self = this;
  var OuterDiv_OnClick     = function(e) { if (!e) e=window.event; self.onClickInnerDivHandler(this);stopBubble(e); };
  var OuterDiv_OnMouseDown = function(e) { if (!e) e=window.event; clearTimeout(self.oTimeoutId); };
  var OuterDiv_OnMouseOver = function(e) { if (!e) e=window.event; self.onMouseOverInnerDivHandler(this); };
  var OuterDiv_OnFocus     = function(e) { if (!e) e=window.event; clearTimeout(self.oTimeoutId); };

  var items=this.aInitialList;
  if (this.numVisible > items.getLength()) {
    this.setNumItemsVisible(items.getLength());
  }
  if (this.numVisible < items.getLength()) {
    this.showLeftScroller = true;
  }else{
    this.showLeftScroller = false;
  }


  for (var i=0; i < items.getLength(); i++){
    var _id = items.getValue(i);
    if(this.innerDivCache[_id]){
      continue;
    }
    var div = getDIV(items.getName(i), 'cbInnerDiv');
    div.myId=_id;
    div.onclick=OuterDiv_OnClick;
    div.onmousedown=OuterDiv_OnMouseDown;
    div.onmouseover=OuterDiv_OnMouseOver;
    div.onfocus=OuterDiv_OnFocus;
    div.tabIndex = 0; //enables focus
    if (!HM_IE){
      //The css could be changed in combobox.css if it wasn't for IE's Quirks mode.
      //Note that in versions of IE before IE8, empty div's have a default minimum
      //height even though they shouldn't.
      div.style.minHeight="30px";
    }
    this.eOuterDiv.appendChild(div);

    var li=new Object();
    li.div=div;
    li.prev=null;
    li.next=null;
    li.id=items.getValue(i);
    li.value=items.getName(i);
    this.innerDivCache[items.getValue(i)] = li;
  }
  // Create Link List
  for (var i=0; i < items.getLength(); i++){
    var li = this.innerDivCache[items.getValue(i)];
    if (i > 0) {
      li.prev = this.innerDivCache[items.getValue(i-1)];
    }else{
      li.prev = null;
    }
    if (i+1 < items.getLength()) {
      li.next = this.innerDivCache[items.getValue(i+1)];
    }else{
      li.next = null;
    }
  }
}

ComboBox.prototype.suggestAsTypedTO = function() {
  var self = this;
  setTimeout(function() {self.txtBoxOnFocus(); self.suggestAsTyped(); self.selectSuggestion(false,1); }, 100);
}

ComboBox.prototype.suggestAsTyped = function() {
	clearTimeout(this.oTimeoutId);
	var indxShouldBeZero = true;
	if (this.matchType != 1) {
		indxShouldBeZero = false;
	}
	var aSuggestList = new NameValueList();
	var valToFind = trim(this.oTextbox.value.toString()).toLowerCase();
	if (valToFind == '') {
		aSuggestList = this.aInitialList;
	} else {
		for ( var i = 0; i < this.aInitialList.getLength(); i++ ) {
			suggestion = this.aInitialList.getName(i);
			var indxOf = suggestion.toLowerCase().indexOf(valToFind);
			if ((indxOf == 0 && indxShouldBeZero) || (indxOf >= 0 && !indxShouldBeZero)) {
				aSuggestList.addItem(this.aInitialList.getItem(i),false);
			}
		}
	}

	this.iSuggestListLength = aSuggestList.getLength();
	this.displaySuggestList(aSuggestList, 3);
	if (this.isOnlySelectMode()) {
		this.handleCursorUpDown(window.event, 0);
	}
	this.oTextbox.focus();
};

ComboBox.prototype.isOnlySelectMode = function() {
	var idArray = ['WorkersCompCB', 'ShiftCB', 'VendorCB', 'PayStmtEditCB'];
	if (idArray.indexOf(this.id) + 1) {
		return true;
	}
	return false;
};

ComboBox.prototype.displaySuggestList = function(aTempList, pos) {
  //$(this.oTextbox).removeClass("error");
  this.currentList = aTempList;
  var idsToShow = new Object();
  for(var i=0; i < aTempList.getLength(); i++){
    idsToShow[aTempList.getValue(i)] = 1;
  }
  for (elm in this.innerDivCache) {
    var disp = 'none';
    if (idsToShow[elm] == 1) {
      disp='block';
    }
    this.innerDivCache[elm].div.style.display = disp;
  }
  if (aTempList.getLength() > 0) {
	  if (this.isOnlySelectMode() && !aTempList.getValue(0).length) return false;
	  this.highlightNewSuggestion(aTempList.getValue(0), false, true, 10);
  } else {
     // $(this.oTextbox).addClass("error");
  }
}

ComboBox.prototype.isPartOfList = function(id) {
  if (this.currentList == null) {
    return false;
  }
  for(var i=0; i < this.currentList.getLength(); i++) {
    if (this.currentList.getValue(i) == id) {
      return true;
    }
  }
  return false;
}

ComboBox.prototype.highlightNewSuggestion = function(selId, bSetInTxtBox, bScroll, pos) {
  var className = '';
  if (this.getSelectedItem() != null) {
	/*if ($(this.getSelectedItem().div).hasClass('empty_field')) {
		className = 'empty_field ';
	} */
    this.getSelectedItem().div.className=className+'cbInnerDiv';
  }
  this.setSelectedId(selId);
  if (this.getSelectedItem() == null) {
    return;
  }
  /*if ($(this.getSelectedItem().div).hasClass('empty_field')) {
		className = 'empty_field ';
  } */
  this.getSelectedItem().div.className= className + 'cbInnerDivSel';

  if (bSetInTxtBox) {
    this.selectSuggestion(false,2);
  }

  var eSelectedInnerDiv = this.getSelectedItem().div;
  if (eSelectedInnerDiv.innerHTML === "") {
    className = 'empty_field ';
    eSelectedInnerDiv.className = className + 'cbInnerDivSel';
  }

  if (bScroll && eSelectedInnerDiv != null) {
    var oDivScrollTop = this.eOuterDiv.scrollTop;
    var oDivHeight = this.eOuterDiv.offsetHeight;
    var oDivExtraScroll = eSelectedInnerDiv.offsetTop +eSelectedInnerDiv.offsetHeight-oDivScrollTop - oDivHeight+2;
    if (oDivExtraScroll > 0) {
      this.eOuterDiv.scrollTop += oDivExtraScroll;
    } else if (eSelectedInnerDiv.offsetTop < oDivScrollTop) {
      this.eOuterDiv.scrollTop += (eSelectedInnerDiv.offsetTop - oDivScrollTop);
    }
  }
}

ComboBox.prototype.selectSuggestion = function(bHide, place) {
  if (this.getSelectedItem() != null) {
    var li = this.getSelectedItem();
    if (this.lastKeycode != 9 || this.iSuggestListLength > 0){
      this.oTextbox.value = li.value;
    }

    this.sLastSuggest = li.value;
    this.sLastSuggestId = li.id;

    var changed = this.setHiddenValue(li.id,2);

    if (bHide) {
      if (changed) {
        this.fireOnChange(2);
      }
    }
  }

  if (bHide) {
    this.oTextbox.select();
    this.hideOuterDiv();
  }
}

ComboBox.prototype.fireOnChange = function(p) {
  if (this.setupHiddenVal != this.oHidden.value) {
    this.setupHiddenVal=this.oHidden.value;
    if(this.oHidden.onchange){ this.oHidden.onchange(); }
    if(this.oTextbox.onchange){ this.oTextbox.onchange(); }
  }
}

ComboBox.prototype.txtBoxOnBlurAfterTimeOut = function() {
  this.focused = false;
 // $(this.oTextbox).removeClass("error");
    var newValue = true;
    //Same Name + Same Id
    for ( var i = 0; i < this.aInitialList.getLength(); i++ ) {
      if (this.aInitialList.getName(i).toLowerCase() ==
          this.oTextbox.value.toLowerCase() &&
          this.aInitialList.getValue(i) == this.oHidden.value) {
        newValue = false;
        this.setHiddenValue(this.aInitialList.getValue(i), 21);
        break;
      }
    }
    if (newValue) {
      //Same Name Only
      for ( var i = 0; i < this.aInitialList.getLength(); i++ ) {
        if (this.aInitialList.getName(i).toLowerCase() ==
            this.oTextbox.value.toLowerCase()) {
          newValue = false;
          this.setHiddenValue(this.aInitialList.getValue(i), 4);
          break;
        }
      }
    }
    if (newValue) {
      if (this.bNewValuesOk) {
        var changed = this.setHiddenValue(this.oTextbox.value,5);
        if (changed) {
          this.fireOnChange(3);
        }
      } else {
        if(this.oTextbox.value) {
          this.oTextbox.value = this.originalDisp;
          this.setHiddenValue(this.originalHidden, 6);
        } else {
          this.oTextbox.value = "";
          this.setHiddenValue("",6);
        }
      }
    }

  this.hideOuterDiv();
}

ComboBox.prototype.txtBoxOnBlur = function(e) {
  if(this.oTextbox.readOnly) {
    return;
  }
  var bNewValue = true;
  //Same Name + Same Id
  for ( var i = 0; i < this.aInitialList.getLength(); i++ ) {
    if (this.aInitialList.getName(i).toLowerCase() ==
        this.oTextbox.value.toLowerCase() &&
        this.aInitialList.getValue(i) == this.oHidden.value) {
      this.oTextbox.value = this.aInitialList.getName(i);
      this.setHiddenValue(this.aInitialList.getValue(i),20);
      bNewValue = false;
      break;
    }
  }
  if (bNewValue) {
    for ( var i = 0; i < this.aInitialList.getLength(); i++ ) {
      if (this.aInitialList.getName(i).toLowerCase() == this.oTextbox.value.toLowerCase()) {
        this.oTextbox.value = this.aInitialList.getName(i);
        this.setHiddenValue(this.aInitialList.getValue(i),7);
        bNewValue = false;
        break;
      }
    }
  }
  if (bNewValue && this.bNewValuesOk && this.bValueRequired && isBlank(this.oTextbox.value)) {
    bNewValue = false;
  }
  if(bNewValue && this.bNewValuesOk) {
    this.setHiddenValue(this.oTextbox.value,8);
  }
  this.fireOnChange(4);
  /*var self = this;
  this.oTimeoutId = setTimeout(function() { self.txtBoxOnBlurAfterTimeOut(); }, 300);*/
}

ComboBox.prototype.divOnFocus = function(e) {
  clearTimeout(this.oTimeoutId);
}




ComboBox.prototype.txtBoxOnFocus = function(e, fromClick) {
  if (!this.focused) {
    try {
      this.oTextbox.select();
    } catch (exp) {}
  }
  this.focused = true;
  clearTimeout(this.oTimeoutId);
  this.displaySuggestList(this.aInitialList, 1);
  if (this.showOnFocus || fromClick) {
    this.showOuterDiv();
  }
}







ComboBox.prototype.onClickInnerDivHandler = function(eInnerDiv) {
  this.lastKeycode = -1;
  this.highlightNewSuggestion(eInnerDiv.myId, false, false, 6);
  this.selectSuggestion(true,3);
}

ComboBox.prototype.onMouseOverInnerDivHandler = function(eInnerDiv) {
  clearTimeout(this.oTimeoutId);
  //this.highlightNewSuggestion(eInnerDiv.myId, false, false, 6);
}

ComboBox.prototype.txtBoxOnKeyUp = function(e) {
	if (!e) { e=window.event; }
	var iKeycode = getEventKeyCode(e);

	if((iKeycode>=16 && iKeycode<=20) || (iKeycode>=112 && iKeycode<=123)){
		return true;
	}
	if (!this.bOuterDivIsVisible) {
		this.txtBoxOnFocus(e,false);
	}

	switch (iKeycode) {
		case 3:return this.selectSuggestion(true,4);
		case 9:
		case 13:this.hideOuterDiv();stopBubble(e);return false;
		case 27:return this.escKeyHandler(e);
		case 33:return false;
		case 34:return false;
		case 35:return this.endKeyHandler(e);
		case 36:return this.homeKeyHandler(e);
		case 27:return true;
		case 37:return true;
		case 38:return false;
		case 39:return true;
		case 40:return false;
		case 8:
		case 46: if (this.isOnlySelectMode()) {return false;}
		default:
			if (this.isOnlySelectMode() && trim(this.oTextbox.value).length > 1) {
				return false;
			}
			return this.suggestAsTyped();
	}
}

ComboBox.prototype.txtBoxOnKeyDown = function(e) {
	if (!e) e=window.event;

	var iKeycode = getEventKeyCode(e);

	if (!this.bOuterDivIsVisible) {
		if (iKeycode == 9 || iKeycode == 13 || iKeycode == 37 || iKeycode == 39 ) {
			return true;
		} else if (!isKeyboardNav(e) && iKeycode != 46 && iKeycode != 16) { //46 - Delete, 16 - Shift
			this.showOuterDiv();
		}
	}

	var self = this;
	var clearField = function() {
		if (self.isOnlySelectMode()) {
			self.highlightNewSuggestion('', true, false);
		}
	};
	this.lastKeycode = iKeycode;
	switch(iKeycode) {
		case 3: return false;
		case 37: //LEFT
		case 39: //RIGHT
			if (this.bValueRequired || (!this.bNewValuesOK && this.oTextbox.value!='')) {
				this.selectSuggestion(true,5);
			}
			return true;
        case 9: //TAB
        	this.selectSuggestion(true,6);
			return true;
		case 13: // Enter
			this.selectSuggestion(true,6);
			return false;
		case 33:return this.handleCursorUpDown(e, -this.numVisible+1);
		case 34:return this.handleCursorUpDown(e, this.numVisible+1);
		case 38:return this.handleCursorUpDown(e, -1);
		case 40:return this.handleCursorUpDown(e, 1);
		case 8:
		case 46: clearField(); break;
		default:
			if (this.isOnlySelectMode() && trim(this.oTextbox.value).length > 0) {
				if (this.oTextbox.selectionStart != this.oTextbox.selectionEnd) {
					clearField();
				} else {
					stopBubble(e);
				}
			}
	}
}

ComboBox.prototype.findItemByCurrentPosition = function(dir) {
  var ci = this.getSelectedItem();
  var valToRet = ci;
  if (ci == null) {
    return null;
  }
  while (dir != 0) {
    if (dir < 0) {
      if (ci.prev == null) {
        return valToRet.id;
      }
      if (this.isPartOfList(ci.prev.id)) {
        valToRet = ci.prev;
        dir++;
      }
      ci = ci.prev;
    } else if (dir > 0) {
      if (ci.next == null) {
        return valToRet.id;
      }
      if (this.isPartOfList(ci.next.id)) {
        valToRet = ci.next;
        dir--;
      }
      ci = ci.next;
    }
  }
  return valToRet.id;
}

ComboBox.prototype.endKeyHandler = function (e) {
  if (e.shiftKey) {
    return true;
  }
  if (this.currentList.getLength() > 0) {
    this.highlightNewSuggestion(this.currentList.getValue_Last(), true, true, 9);
  }
  return false;
}

ComboBox.prototype.homeKeyHandler = function (e) {
  if (e.shiftKey) {
    return true;
  }
  if (this.currentList.getLength() > 0) {
    this.highlightNewSuggestion(this.currentList.getValue(0), true, true, 10);
  }
  return false;
}

ComboBox.prototype.escKeyHandler = function (e) {
  this.setSelectedId(this.oHidden.value);
  this.selectSuggestion(true,7);
}

ComboBox.prototype.handleCursorUpDown = function(e, dir) {
	if (!this.isOnlySelectMode()) {
		if (this.upDownDoesNotStartEdit && !this.bOuterDivIsVisible) {
			return true;
		}
	}
	if (!this.bOuterDivIsVisible) {
		this.selectNewSuggestion();
	}

	if(isNull(this.getSelectedItem())) {
		this.setSelectedId(this.sLastSuggestId);
		dir = 0;
	}
	var sel = this.findItemByCurrentPosition(dir);
	if (sel != null) {
		this.highlightNewSuggestion(sel, true, true, 4);
	} else {
		this.highlightNewSuggestion(this.aInitialList.getValue(0), true, true, 4);
	}
	stopBubble(e);
	return false;
}

function startLoadComboItems(list){
  if(window.mapAsyncItemSourceNameToId[list]){
    window.mapAsyncItemSourceNameToId[list].startLoad();
  }
}
function addComboItems(list,items){
  if(window.mapAsyncItemSourceNameToId[list]){
    window.mapAsyncItemSourceNameToId[list].addItems(items);
  }
}
function endLoadComboItems(list){
  if(window.mapAsyncItemSourceNameToId[list]){
    window.mapAsyncItemSourceNameToId[list].endLoad();
  }
}
/** END COMBOX **/
// working with element classes
var classControl = {};

classControl.hasClass = function(el, clsName) {
	var classList = el.className.split(" ");
	var res = false;

	for (var i = 0; i <= classList.length; i++) {
		if (classList[i] == clsName) {
			res = true;
		}
	}

	return res;
};

classControl.addClass = function(el, clsName) {
	var classList = el.className.split(" ");

	if (!this.hasClass(el, clsName)) {
		classList.push(clsName);
	}

	el.className = classList.join(" ");
};

classControl.removeClass = function(el, clsName) {
	var classList = el.className.split(" ");

	for (var i = 0; i <= classList.length; i++) {
		if (classList[i] == clsName) {
			classList.splice(i, 1);
		}
	}

	el.className = classList.join(" ");
};

//Custom dropdown module
var dropdown = (function () {
	function Dropdown(elem, options) {
		this.elem = elem;
		this.dropdownToggle = null;
		this.dropdownWrapper = null;
		this.dropdownToggleText = null;
		this.dropdownToggleArrow = null;
		this.dropdownListWrapper = null;
		this.optionsTextList = [];
		this.currentOptionsWrapper = null;
		this.optionsList = null;
		this.optionsLength = null;

		this.setMaxHeight = (typeof options.max_options_height === 'undefined') ? true : options.max_options_height;
		this.setMinWidth = options.min_width || false;
		this.showError = options.show_error || false;
		this.maxOptionsToShow = options.max_options_to_show || 16;
		this.standartBehavior = options.standart_behavior || false;
        this.displayTitle = (typeof options.display_title === 'undefined') ? true : options.display_title;

		this.ie10 = false;
		this.keysPressed = [];
		this.elemSelected = null;
		this.elemHovered = null;
        this.isPopover = classControl.hasClass(elem, "popover-list");
	}

	Dropdown.prototype = {
		createDropdown: function() {
			var i;
			var dropdownWrapper;

			var current = this.elem;
			var parent = current.parentNode;

			// checks if wrapper already has dropdown element and delete it to add the new one
			if (this.hasDropdownElements(parent)) {
                this.dropdownToggleText = $(parent).find(".dropdown_toggle_text")[0];
                this.dropdownToggleArrow = $(parent).find(".dropdown_arrow")[0];
                this.dropdownToggle = $(parent).find(".dropdown_toggle")[0];
                this.dropdownWrapper = $(parent).find(".dropdown")[0];
                this.dropdownListWrapper = $("[select-name='" + current.getAttribute('name') + "']")[0];
                $(this.dropdownListWrapper).find(".dropdown_menu_list").remove();
                this.createOptions(current);
                 return;
			}

			// create general wrapper
			dropdownWrapper = document.createElement("div");
			dropdownWrapper.className = "dropdown";
			dropdownWrapper.setAttribute("tabindex", 0);

			// create toggler
			var dropdownToggle;
			var dropdownToggleText;
			var dropdownToggleArrow;
			var currentOptionText = current.options.text;

			dropdownToggle = document.createElement("a");
			dropdownToggle.className = "dropdown_toggle";
			dropdownToggleText = document.createElement("span");
			dropdownToggleText.className = "dropdown_toggle_text";
			if (this.showError) {
				dropdownToggleText.className = dropdownToggleText.className + " errorDropDown";
			}

			// add class for stylizing error fields
			if (classControl.hasClass(this.elem, "errorField")) {
				classControl.addClass(dropdownToggle, "errorField");
			}

			dropdownToggleText.innerText = currentOptionText;
            if (this.displayTitle) {
                dropdownToggle.setAttribute("title", currentOptionText);
            }

			// check if select has onmouseover or onmouseout attributes
			if (current.hasAttribute("onmouseover") && current.getAttribute("onmouseover").length > 0) {
				dropdownToggle.setAttribute("onmouseover", current.getAttribute("onmouseover"));
			}

			if (current.hasAttribute("onmouseout") && current.getAttribute("onmouseout").length > 0) {
				dropdownToggle.setAttribute("onmouseout", current.getAttribute("onmouseout"));
			}

			if (!currentOptionText) {
				classControl.addClass(dropdownToggle, "empty_field");
			}

			dropdownToggleArrow = document.createElement("span");
			dropdownToggleArrow.className = "dropdown_arrow";

			dropdownToggle.appendChild(dropdownToggleText);
			dropdownToggle.appendChild(dropdownToggleArrow);

			// create options wrapper
			var dropdownListWrapper = document.createElement("div");
            dropdownListWrapper.className = (this.isPopover) ? "dropdown_menu popover" : "dropdown_menu";
			if (current.getAttribute('name')) {
				dropdownListWrapper.setAttribute('select-name', current.getAttribute('name'));
			}

			dropdownWrapper.appendChild(dropdownToggle);

            this.dropdownToggleText = dropdownToggleText;
			this.dropdownToggleArrow = dropdownToggleArrow;

			this.dropdownToggle = dropdownToggle;
			this.dropdownWrapper = dropdownWrapper;
			this.dropdownListWrapper = dropdownListWrapper;


            this.createOptions(current);

			if (!this.standartBehavior) {
				document.body.appendChild(dropdownListWrapper);
			} else {
				dropdownWrapper.appendChild(dropdownListWrapper);
			}

			parent.appendChild(dropdownWrapper);

			if (this.setMinWidth === true) {
				this.dropdownToggle.style.width = this.dropdownToggle.offsetWidth + 45 + "px";
			}

			$(current).off('keydown.missed').on('keydown.missed', function(e) {
				if (e.keyCode != 9) {
					e.preventDefault();
				}
			})
		},

		hasDropdownElements: function(parentElem) {
			var childNodes = parentElem.childNodes;
			var childNodesLength = childNodes.length;
			var childIndex;
			var currentChildNode;

			for (childIndex = 0; childIndex < childNodesLength; childIndex++) {
				if (childNodes[childIndex] && childNodes[childIndex].tagName == "DIV") {
					currentChildNode = childNodes[childIndex];
					if (classControl.hasClass(currentChildNode, "dropdown")) {
                        return true;
					}
				}
			}
		},
        createOptions: function(current) {

			// fix Dropdown without options not displayed
			if (current.options.length <= 0) {
				var newOption = document.createElement("option");
				current.appendChild(newOption);
			}

			var currentOptions = current.options;
			var optionsLength = currentOptions.length;
			var currentOptionsWrapper;
			var currentOption;
			var currentOptionValue;
			var j;
			var newOption;
			var newOptionLink;

			this.optionsLength = optionsLength;

            currentOptionsWrapper = document.createElement("ul");
			currentOptionsWrapper.className = "dropdown_menu_list";

			// create options list
			var optionsList = [];
			var optGroup;
			var optGroupElement;
			var optGroupLabel;
			var selectedOption;
			var hasValue = this.hasValue();
			var checkValue;

			// check if select element has selected option
			var hasSelected = this.hasSelectedOption(currentOptions, optionsLength);

			// if selected element has not ane selected options
			// and it hasn't value attribute, then select first one
			if (!hasSelected) {
				if (!hasValue) {
					var firstOptionVale = currentOptions[0].getAttribute("value");

					this.selectItem(current, currentOptions[0]);
					current.selectedIndex = 0;
				}
			}

			if (this.elem.multiple) {
				newOption = document.createElement("li");
				newOption.className = "dropdown_menu_elem select_all";
				newOptionLink = document.createElement("a");
				newOptionLink.className = "dropdown_menu_link";
				newOptionLink.innerHTML = "select all";

				newOption.appendChild(newOptionLink);
				currentOptionsWrapper.appendChild(newOption);
				if (this.dropdownListWrapper) {
					this.dropdownListWrapper.appendChild(currentOptionsWrapper);
				}
				optionsList.push(newOption);
			}

			for (j = 0; j < optionsLength; j++) {
				currentOption = currentOptions[j];
				currentOptionValue = currentOption.value;
				currentOptionText = currentOption.text;
                currentOptionHref = currentOption.getAttribute("data-href");
                currentOptionOnclick = currentOption.getAttribute("data-onclick");
                currentOptionTarget = currentOption.getAttribute("data-target");
                currentOptionSeparator = currentOption.hasAttribute("data-separator");
                currentOptionBold = currentOption.hasAttribute("data-bold");
                currentOptionSection = currentOption.hasAttribute("data-section");
                currentOptionNotSelectable = currentOption.hasAttribute("not-selectable");

                if (!hasSelected) {
					if (hasValue) {
						var selectValue = current.getAttribute("value");
						checkValue = this.checkValue(selectValue, currentOptionValue);

						if (checkValue) {
							this.selectItem(current, currentOptionValue);
							current.selectedIndex = j;
						}
					}
				}

				newOption = document.createElement("li");
				newOption.className = "dropdown_menu_elem";
				newOptionLink = document.createElement("a");
				newOptionLink.className = "dropdown_menu_link";
				newOptionLink.innerText = currentOptionText;
				newOptionLink.setAttribute("data-value", currentOptionValue);

                if (currentOptionHref) newOptionLink.setAttribute("href", currentOptionHref);
                if (currentOptionOnclick) newOptionLink.setAttribute("onclick", currentOptionOnclick);
                if (currentOptionTarget) newOptionLink.setAttribute("target", currentOptionTarget);
                if (currentOptionSeparator && !!currentOptions[j + 1]) classControl.addClass(newOption, "separator");
                if (currentOptionBold) classControl.addClass(newOption, "bold");
                if (currentOptionSection) classControl.addClass(newOption, "section");
                if (currentOptionNotSelectable) classControl.addClass(newOptionLink, "not_selectable");

                // empty option
				if (classControl.hasClass(currentOption, "empty_field")) {
					classControl.addClass(newOptionLink, "empty_field");
					classControl.addClass(this.dropdownToggle, "empty_field");
				}

				// selected option
				selectedOption = (this.isPopover) ? this.elem.options[j].hasAttribute("selected") : this.elem.options[j].selected;
                if (selectedOption) {
                    classControl.addClass(newOption, "selected");

					if (!classControl.hasClass(currentOption, "empty_field")) {
						classControl.removeClass(this.dropdownToggle, "empty_field");
					}
				}

				// creating options groups
				if (currentOption.parentElement.tagName == "OPTGROUP") {
					optGroup = currentOption.parentElement;

					if (!optGroupLabel) {
						optGroupLabel = optGroup.label;

						optGroupElement = document.createElement("li");
						optGroupElement.className = "options_group";
						optGroupElement.innerHTML = optGroupLabel;
						currentOptionsWrapper.appendChild(optGroupElement);

					} else {
						if (optGroupLabel != optGroup.label) {
							optGroupLabel = optGroup.label;

							optGroupElement = document.createElement("li");
							optGroupElement.className = "options_group";
							optGroupElement.innerHTML = optGroupLabel;
							currentOptionsWrapper.appendChild(optGroupElement);
						}
					}
				}

				newOption.appendChild(newOptionLink);
				currentOptionsWrapper.appendChild(newOption);
				if (this.dropdownListWrapper) {
					this.dropdownListWrapper.appendChild(currentOptionsWrapper);
				}
				optionsList.push(newOption);
			}

			this.currentOptionsWrapper = currentOptionsWrapper;
			this.optionsList = optionsList;
			this.optionsListLength = optionsList.length;
			this.changeDropdownToggleText();
		},

		hasSelectedOption: function(options, optionsLength) {
			var optionIndex;
			var selected = false;

			for (optionIndex = 0; optionIndex < optionsLength; optionIndex++) {
				if (this.elem.selectedIndex == optionIndex) {
					selected = true;
				}
			}

			return selected;
		},

		hasValue: function() {
			if (this.elem.hasAttribute("value") && this.elem.getAttribute("value").length > 0) {
				return true;
			} else {
				return false;
			}
		},

		checkValue: function(selectValue, elemValue) {
			if (selectValue == elemValue) {
				return true;
			} else {
				return false;
			}
		},

		toggleCurrentDropdown: function(event) {
			event.stopPropagation();
			event.preventDefault();

			if (classControl.hasClass(this.dropdownToggle, "open")) {
				classControl.removeClass(this.dropdownToggle, "open");
				classControl.removeClass(this.dropdownListWrapper, "open");
			} else {
				this.closeDropdowns();
				classControl.addClass(this.dropdownToggle, "open");
				classControl.addClass(this.dropdownListWrapper, "open");

				if (this.setMaxHeight) {
					this.setOptionsMaxSize();
				}

				if (!this.standartBehavior) {
					this.setOptionsPosition();
				} else {
					this.setOptionsSize();
				}

				this.scrollOptionsList();
			}
		},

		closeDropdowns: function(event) {
			var allNewSelects = document.querySelectorAll(".dropdown:not(.standart_dropdown) .dropdown_toggle");
			var allDropdownMenus = document.getElementsByClassName("dropdown_menu");

			for (var i = 0; i < allNewSelects.length; i++) {
				if (classControl.hasClass(allNewSelects[i], "open")) {
					classControl.removeClass(allNewSelects[i], "open");
				}
			}

			for (var j = 0; j < allDropdownMenus.length; j++) {
				if (classControl.hasClass(allDropdownMenus[j], "open")) {
					classControl.removeClass(allDropdownMenus[j], "open");
				}
			}
		},

		chooseElement: function(event, targ) {
			var e = event || document.event;
			e.stopPropagation();

			var target = targ || e.target;
			var select = this.elem;
			var clickedElement;
			var selectedElement;
			var optionsLinks = this.optionsList;
			var optionsLinksLength = optionsLinks.length;

			var i;
			var currentLink;

			if (classControl.hasClass(target, "dropdown_menu_link") && !classControl.hasClass(target, "not_selectable")) {
				clickedElement = target;
				selectedElement = clickedElement.parentElement;

				if (classControl.hasClass(this.dropdownToggle, "empty_field")) {
					classControl.removeClass(this.dropdownToggle, "empty_field");
				}

				if (this.elem.multiple) {
					$(selectedElement).toggleClass('selected');
				} else {
					// "selected" element's class is used for styling current selected option
					for (i = 0; i < optionsLinksLength; i++) {
						currentLink = optionsLinks[i];

						if (classControl.hasClass(optionsLinks[i], "selected")) {
							classControl.removeClass(optionsLinks[i], "selected");
						}
					}

					// add "empty_field" class if no value item is selected
					if (classControl.hasClass(clickedElement, "empty_field")) {
						classControl.addClass(this.dropdownToggle, "empty_field");
					}

					classControl.addClass(selectedElement, "selected");

					this.elemSelected = clickedElement;
					this.scrollOptionsList();
				}

				this.changeDropdownToggleText();

				if (this.setMinWidth === true) {
					this.dropdownToggle.style.minWidth = this.dropdownToggle.offsetWidth + "px";
				}

				if (select.getAttribute('ctrl-elm')) {
					changeGlobalTableColumnWidth(select);
				}
			}
		},

		changeDropdownToggleText: function() {
			var elementText,
				selectedOptionsLength = $(this.elem).find(':selected').length;

			if (this.elem.multiple && selectedOptionsLength != 1) {
				if (selectedOptionsLength == this.elem.options.length) {
					elementText = 'All selected';
				} else {
					elementText = (selectedOptionsLength) ?
					selectedOptionsLength +' of ' + this.elem.options.length + ' selected' : '';
				}
			} else {
				elementText = this.elem.options[this.elem.selectedIndex].text;
			}

			this.dropdownToggleText.innerText = elementText;

            if (this.displayTitle) {
                this.dropdownToggle.setAttribute("title", elementText);
            }

             if (this.elem.options[this.elem.selectedIndex].hasAttribute("not-selectable")) {
                this.dropdownToggleText.innerText = '';
             }
		},

		selectItem: function (elem, val) {
			var i;
			var elemOnchange;
			var elemOptions;
			var elemOptionsLength;

			if (elem.options) {
				elemOptions = elem.options;
				elemOptionsLength = elemOptions.length;

				for (i = 0; i < elemOptionsLength; i++) {
					if (elemOptions[i].value == val) {
						if (elem.multiple) {
							elemOptions[i].selected = !elemOptions[i].selected;
						} else {
							elem.selectedIndex = i;
						}
					}
				}
			}

			 //force run onchange event on the select element
			 if (elem.onchange) {
			 	elem.onchange();
			 }
		},
		clearHover: function (e) {
			this.elemHovered = null;
		},
		selectElem: function(e, targ, blur) {
			e.stopPropagation();

			var target = targ || e.target;

			if (classControl.hasClass(target.parentElement, "select_all")) {
				var isSelectAll = ($(this.elem).find(':selected').length == this.elem.options.length);
				var $dropdownItems = $(this.dropdownListWrapper).find('li:not(.select_all)');

				for (var i = 0; i < this.elem.options.length; i++) {
					this.elem.options[i].selected = !isSelectAll;
				}
				if (isSelectAll) {
					$dropdownItems.removeClass('selected');
				} else {
					$dropdownItems.addClass('selected');
				}
				this.changeDropdownToggleText();
			} else {
				var clickedElementValue = target.getAttribute("data-value");

				if (!this.elem.multiple) {
					classControl.removeClass(this.dropdownToggle, "open");
					classControl.removeClass(this.dropdownListWrapper, "open");
				}

				this.selectItem(this.elem, clickedElementValue);
				this.chooseElement(e, targ);
			}

			if (blur && blur === true) {
				this.dropdownWrapper.blur();
			} else {
				this.dropdownWrapper.focus();
			}
		},

		closeAllDropdowns: function(event) {
			event.stopPropagation();
			this.closeDropdowns();

			if (this.keysPressed && this.keysPressed.length > 0) {
				this.keysPressed.length = 0;
			}
		},

		selectAndCloseDropdowns: function(event, blur) {
			if (this.elemHovered) {

				if (blur === false) {
					this.selectElem(event, this.elemHovered);
				} else {
					this.selectElem(event, this.elemHovered, true);
				}

				this.elemHovered = null;
			}
		},

		setOptionsPosition: function() {
			var dropdownToggle = this.dropdownToggle;
			var dropdownToggleParams = this.getElemParams(dropdownToggle);
			var dropdownToggleWidth = dropdownToggleParams.width;
			var dropdownMenu = this.dropdownListWrapper;

			// delete dropdown menu wrapper styles to avoid wrong position calculations
			dropdownMenu.style.removeProperty("max-width");
			dropdownMenu.style.removeProperty("left");

			var dropdownMenuParams = this.getElemParams(dropdownMenu);

			var positionLeft = dropdownToggleParams.offsetLeft;

			var optionsNumber = this.maxOptionsToShow;
			var optionsLimitedHeight = this.getOptionsHeight(optionsNumber) + 2;
			var optionsLimitedWidth = dropdownMenuParams.width;

			var spaceTop = dropdownToggle.getBoundingClientRect().top;
			var spaceBottom = window.innerHeight - dropdownToggle.getBoundingClientRect().top - dropdownToggle.getBoundingClientRect().height;
			var spaceLeft = dropdownToggleParams.offsetLeft + dropdownToggleWidth - 20;
			var spaceRight = window.innerWidth + window.pageXOffset - dropdownToggleParams.offsetLeft - 20;

			var IE10 = this.ie10;
			var maxHeight;

			// check if empty space in the right more than space in the left
			if (spaceRight >= optionsLimitedWidth) {

				if (IE10) {
					dropdownMenu.style.left = positionLeft - 1 + "px";
				} else {
					dropdownMenu.style.left = positionLeft + "px";
				}
			} else if (spaceLeft >= optionsLimitedWidth) {

				if (IE10) {
					dropdownMenu.style.left = positionLeft - optionsLimitedWidth + dropdownToggleWidth - 1 + "px";
				} else {
					dropdownMenu.style.left = positionLeft - optionsLimitedWidth + dropdownToggleWidth + "px";
				}
			} else if (optionsLimitedWidth > spaceRight && optionsLimitedWidth > spaceLeft) {
				if (spaceRight > spaceLeft) {
					dropdownMenu.style.maxWidth = spaceRight + "px";
					classControl.addClass(dropdownMenu, "whiteSpaceWrap");

					if (IE10) {
						dropdownMenu.style.left = positionLeft - 1 + "px";
					} else {
						dropdownMenu.style.left = positionLeft + "px";
					}
				} else {
					dropdownMenu.style.maxWidth = spaceLeft + "px";
					classControl.addClass(dropdownMenu, "whiteSpaceWrap");
					optionsLimitedWidth = this.getElemParams(dropdownMenu).width;

					if (IE10) {
						dropdownMenu.style.left = positionLeft - optionsLimitedWidth + dropdownToggleWidth - 1 + "px";
					} else {
						dropdownMenu.style.left = positionLeft - optionsLimitedWidth + dropdownToggleWidth + "px";
					}
				}
			}

			// check if empty space in the top more than space in the bottom
			if (spaceBottom > optionsLimitedHeight) {
				dropdownMenu.style.top = dropdownToggleParams.offsetTop + dropdownToggleParams.height - 1 + "px";
			} else if (spaceTop > optionsLimitedHeight) {
				dropdownMenu.style.top = dropdownToggleParams.offsetTop - optionsLimitedHeight + 1 + "px";
			} else if (optionsLimitedHeight > spaceBottom && optionsLimitedHeight > spaceTop) {
				if (spaceBottom > spaceTop) {
					maxHeight = spaceBottom - 45;
					dropdownMenu.style.maxHeight = maxHeight + "px";
					dropdownMenu.style.top = dropdownToggleParams.offsetTop + dropdownToggleParams.height - 1 + "px";
				} else {
					maxHeight = spaceTop - 20;
					dropdownMenu.style.maxHeight = maxHeight + "px";
					dropdownMenu.style.top = dropdownToggleParams.offsetTop - maxHeight + 1 + "px";
				}
			}

            if (this.isPopover) {
                dropdownMenu.style.top = parseInt(dropdownMenu.style.top) + 5 + "px"
            }
		},

		setOptionsSize: function() {
			var iframe = this.getIframeSize();
			var elem = this.getElemParams(this.dropdownListWrapper);
			var dropdownToggle = this.dropdownToggle;
			var toggleParams = this.getElemParams(dropdownToggle);
			var dropdownMenu = this.dropdownListWrapper;

			this.setOptionsHeight(iframe, elem, dropdownMenu);
			this.setOptionsWidth(iframe, elem, toggleParams, dropdownMenu);
		},

		setOptionsHeight: function(iframe, elem, dropdownMenu) {
			var iframeHeight = iframe.height;
			var optionsNumber = this.maxOptionsToShow;
			var optionsLimitedHeight = this.getOptionsHeight(optionsNumber) + 2;
			var dropdownMenuMaxHeight;
			var parentInfoBoxWrap = this.parentHasClass(this.dropdownWrapper, "infoBoxWrap");

			if (parentInfoBoxWrap) {
				dropdownMenuMaxHeight = iframeHeight - elem.offsetTop + window.pageYOffset - 45;
			} else {
				dropdownMenuMaxHeight = iframeHeight - elem.offsetTop - 45;
			}

			if (dropdownMenuMaxHeight <= 0) {
				dropdownMenuMaxHeight = 30;
			}

			if (dropdownMenuMaxHeight > optionsLimitedHeight) {
				dropdownMenu.style.maxHeight = optionsLimitedHeight  + "px";
			} else {
				dropdownMenu.style.maxHeight = dropdownMenuMaxHeight  + "px";
			}
		},

		setOptionsMaxSize: function() {
			var iframe = this.getIframeSize();
			var elem = this.getElemParams(this.dropdownListWrapper);
			var dropdownToggle = this.dropdownToggle;
			var toggleParams = this.getElemParams(dropdownToggle);
			var dropdownMenu = this.dropdownListWrapper;
			var parentHasClass = this.parentHasClass(this.dropdownWrapper, "infoBoxWrap");

			if (parentHasClass) {
				classControl.addClass(dropdownMenu, "fixedItem");
			}

			this.setOptionsMaxHeight(iframe, elem, dropdownMenu);
			this.setOptionsWidth(iframe, elem, toggleParams, dropdownMenu);
		},

		setOptionsMaxHeight: function(iframe, elem, dropdownMenu) {
			var iframeHeight = iframe.height;
			var optionsNumber = this.maxOptionsToShow;
			var optionsLimitedHeight = this.getOptionsHeight(optionsNumber) + 3;

			dropdownMenu.style.maxHeight = optionsLimitedHeight  + "px";
		},

		setOptionsWidth: function(iframe, elem, toggleParams, dropdownMenu) {
			var iframeWidth = iframe.width;
			var elemWidth = elem.width;
			var toggleWidth = toggleParams.width;
			var dropdownMenuParams = this.getElemParams(dropdownMenu);
			var dropdownMenuWidth = dropdownMenuParams.width;
			var dropdownMenuMaxWidthRight = Math.ceil(iframeWidth - toggleParams.offsetLeft - 5);
			var dropdownMenuMaxWidthLeft = Math.ceil(toggleParams.offsetLeft + dropdownMenuWidth - 5);

			if (toggleWidth > dropdownMenuWidth) {
				dropdownMenu.style.minWidth = toggleWidth + "px";
			}
		},

		getIframeSize: function() {
			var iframe = {};
			var documentBody;

			if (window.parent) {
				documentBody = window.document.body;
				var parentHasClass = this.parentHasClass(this.dropdownWrapper, "infoBoxWrap");

				if (classControl.hasClass(documentBody, "popupContainer")) {
					if (parentHasClass) {
						iframe.height = documentBody.clientHeight;
					} else {
						if (documentBody.offsetHeight > 0) {
							iframe.height = documentBody.offsetHeight;
						} else if (document.documentElement) {
							iframe.height = document.documentElement.offsetHeight;
						}
					}
				} else {
					if (parentHasClass) {
						iframe.height = documentBody.clientHeight;
					} else {
						iframe.height = documentBody.scrollHeight;
					}
				}

				iframe.width = documentBody.clientWidth;
			}

			return iframe;
		},

		parentHasClass: function(elem, clsName) {
			do {
				if (classControl.hasClass(elem, clsName)) {
					return elem;
				}

				elem = elem.parentElement;
			} while (elem);

			return false;
		},

		getOptionsHeight: function(optionsNumber) {
			var optionsWrapper = this.currentOptionsWrapper;
			var optionsWrapperChildren = optionsWrapper.childNodes;
			var optionsWrapperChildrenLength = optionsWrapperChildren.length;
			var optionsListHeight = 0;
			var maxOptions;
			var i;

			if (optionsNumber && optionsNumber < optionsWrapperChildrenLength) {
				maxOptions = optionsNumber;
			} else {
				maxOptions = optionsWrapperChildren.length;
			}

			for (i = 0; i < maxOptions; i++) {
				optionsListHeight += optionsWrapperChildren[i].offsetHeight;
			}

			return optionsListHeight;
		},

		getElemParams: function(element) {
			var elem = {};
			var parentHasClass = this.parentHasClass(element, "infoBoxWrap");

			if (window.parent) {
				if (parentHasClass) {
					elem.offsetTop = element.getBoundingClientRect().top;
					elem.offsetLeft = element.getBoundingClientRect().left;
				} else {
					elem.offsetTop = element.getBoundingClientRect().top + window.pageYOffset;
					elem.offsetLeft = element.getBoundingClientRect().left + window.pageXOffset;
				}

				elem.height = element.getBoundingClientRect().height;
				elem.width = element.getBoundingClientRect().width;
			}

			return elem;
		},

		scrollOptionsList: function() {
			var hasSelectedClass = this.hasSelectedClass();
			var selectedElem;
			var selectedElemParams;
			var selectedElemTop;
			var optionsListParams;
			var optionsListTop;

			if (hasSelectedClass.selected) {
				selectedElem = this.optionsList[hasSelectedClass.index];
				selectedElemParams = this.getElemParams(selectedElem);
				selectedElemTop = selectedElemParams.offsetTop;
				optionsListParams = this.getElemParams(this.dropdownListWrapper);
				optionsListTop = optionsListParams.offsetTop;
				if (this.dropdownListWrapper) {
					this.dropdownListWrapper.scrollTop = this.dropdownListWrapper.scrollTop + (selectedElemTop - optionsListTop);
				}
			}
		},

		hasSelectedClass: function() {
			var optionsList = this.optionsList;
			var optionsListLength = optionsList.length;
			var selectedElem = {};
			selectedElem.selected = false;
			var optionIndex;
			var currentOption;

			for (optionIndex = 0; optionIndex < optionsListLength; optionIndex++) {
				currentOption = optionsList[optionIndex];

				if (classControl.hasClass(currentOption, "selected")) {
					selectedElem.selected = true;
					selectedElem.index = optionIndex;
				}
			}

			return selectedElem;
		},

		isIE10: function() {
			// isIE - external function
			var ie10 = isIE();

			if (ie10) {
				var matched = navigator.userAgent.match(/MSIE\s([\d]+)/);
				if (matched && matched[1] == 10) {
					this.ie10 = true;
				} else {
					this.ie10 = false;
				}
			}
		},

		// close dropdown if parent element has scroll and if it is scrolled
		closeIfScrollBlock: function() {
			var scrollingBlock = document.getElementsByClassName("scrollingBlock");

			for (var i = 0; i < scrollingBlock.length; i++) {
				scrollingBlock[i].onscroll = this.closeAllDropdowns.bind(this);
			}
		},

		keyboardTextEnter: function(e) {
			var keysPressed = this.keysPressed;
			var pressedKeyValue = this.getChar(e);
			var that = this;
			var enteredText;

			// click enter button if options list is closed
			if (e.keyCode == 13) {
				if (classControl.hasClass(this.dropdownToggle, "open")) {
					this.selectElem(e, this.elemSelected);
				} else {
					this.elem.click();
				}

				return;
			} else if (e.keyCode == 9) {
				return;
			}

			keysPressed.push(pressedKeyValue);
			enteredText = keysPressed.join("");


			var checkedText = this.checkEnteredText(enteredText);

			if (Math.ceil(checkedText) >= 0) {
				var link = this.optionsList[checkedText].getElementsByClassName("dropdown_menu_link")[0];
				this.elemHovered = link;

				if (classControl.hasClass(this.dropdownToggle, "open")) {
					this.chooseElement(e, link);
				} else {
					this.selectElem(e, link);
				}
			}

			setTimeout(this.clearEnteredText.bind(that), 2000);
		},

		checkEnteredText: function(text) {
			var optionIndex;
			var currentText;

			for (optionIndex = 0; optionIndex < this.optionsTextList.length; optionIndex++) {
				currentText = this.optionsTextList[optionIndex].text.toLowerCase();

				if (currentText.indexOf(text.toLowerCase()) == 0) {
					return this.optionsTextList[optionIndex].id;
				}
			}
		},

		getChar: function(event) {
			if (event.which == null) {
				if (event.keyCode < 32) {
					return null;
				}

				return String.fromCharCode(event.keyCode)
			}

			if (event.which != 0) {
				if (event.which < 32) {
					return null;
				}

				return String.fromCharCode(event.which);
			}

			return null;
		},

		clearEnteredText: function() {
			this.keysPressed.length = 0;
		},

		specialKeysPress: function (e) {
			var selectedElemIndex = this.getSelectedElemIndex();
			var isInReportTableRow = !!$(e.currentTarget).parents('#reportTableRow').length;

			if (!this.elem.multiple) {
				if ((e.keyCode == 37 && !isInReportTableRow) || e.keyCode == 38) {
					e.preventDefault();
					this.selectPrevElem(e, selectedElemIndex);
				}

				if ((e.keyCode == 39 && !isInReportTableRow) || e.keyCode == 40) {
					e.preventDefault();
					this.selectNextElem(e, selectedElemIndex);
				}
			}

			if (e.keyCode == 9) {
				if (classControl.hasClass(this.dropdownToggle, "open")) {
					e.preventDefault();
					e.stopPropagation();

					classControl.removeClass(this.dropdownToggle, "open");
					classControl.removeClass(this.dropdownListWrapper, "open");

					this.selectAndCloseDropdowns(e, false);
				}
			}
		},

		selectPrevElem: function(e, selectedElemIndex) {
			var prevElem;
			var prevElemLink;

			if (selectedElemIndex == 0) {
				prevElem = this.optionsList[0];
			} else {
				prevElem = this.optionsList[selectedElemIndex - 1];
			}

			prevElemLink = prevElem.querySelector(".dropdown_menu_link");
			this.elemHovered = prevElemLink;

			if (classControl.hasClass(this.dropdownToggle, "open")) {
				this.selectItem(this.elem, prevElemLink.getAttribute("data-value"));
				this.chooseElement(e, prevElemLink);
			} else {
				this.selectElem(e, prevElemLink);
			}
		},

		selectNextElem: function(e, selectedElemIndex) {
			var nextElem
			var nextElemLink;

			if (selectedElemIndex == this.optionsLength - 1) {
				nextElem = this.optionsList[this.optionsLength - 1];
			} else {
				nextElem = this.optionsList[selectedElemIndex + 1];
			}

			nextElemLink = nextElem.querySelector(".dropdown_menu_link");
			this.elemHovered = nextElemLink;

			if (classControl.hasClass(this.dropdownToggle, "open")) {
				this.selectItem(this.elem, nextElemLink.getAttribute("data-value"));
				this.chooseElement(e, nextElemLink);
			} else {
				this.selectElem(e, nextElemLink);
			}
		},

		getSelectedElemIndex: function() {
			var elemIndex;

			for (var i = 0; i < this.optionsListLength; i++) {
				if (this.optionsList[i].querySelector(".dropdown_menu_link") == this.elemSelected) {
					elemIndex = i;

					return elemIndex;
				}
			}
		},

		setSelectedItem: function() {
			for (var i = 0; i < this.optionsListLength; i++) {
				if (classControl.hasClass(this.optionsList[i], "selected")) {
					this.elemSelected = this.optionsList[i].querySelector(".dropdown_menu_link");

					if (!this.elem.multiple) return;
				}
			};
		},

		collectOptionsText: function() {
			var optionText;
			var currentElemLink;
			var currentElemLinkText;

			for (var i = 0; i < this.optionsListLength; i++) {
				currentElemLink = this.optionsList[i].firstChild;
				currentElemLinkText = currentElemLink.innerText || currentElemLink.textContent;

				optionText = {"id": i, "text": currentElemLinkText};

				this.optionsTextList.push(optionText);
			}
		},

		initDropdowns: function() {
			this.createDropdown();
			this.setSelectedItem();
			this.isIE10();
			this.closeIfScrollBlock();
			this.collectOptionsText();

			document.onclick = this.closeAllDropdowns.bind(this);
			window.onscroll = this.closeAllDropdowns.bind(this);
			this.dropdownWrapper.onblur = this.selectAndCloseDropdowns.bind(this);

			if (!this.elem.multiple) {
				this.dropdownWrapper.onkeypress = this.keyboardTextEnter.bind(this);
			}
			this.dropdownWrapper.onkeydown = this.specialKeysPress.bind(this);

			this.dropdownToggle.onclick = this.toggleCurrentDropdown.bind(this);
			if (this.dropdownListWrapper) {
				this.dropdownListWrapper.onclick = this.selectElem.bind(this);
				this.dropdownListWrapper.onmousedown = this.clearHover.bind(this);
			}
			this.dropdownToggleArrow.onclick = this.toggleCurrentDropdown.bind(this);
		}
	};

	/**
	 * Initialize module
	 * @param {Object} options - General options to initialize module
	 * @param {string} options.select_wrapper_id - id of the wrapper of all select elements which need to be customized.
	 * @param {string} options.select_class_name - Class name of select elements.
	 * @param {boolean} options.max_options_height - Auto Options block height.
	 * @param {boolean} options.min_width - Set min width to select.
	 * @param {number} options.max_options_to_show - Max number of the shown Options.
	 * @param {boolean} options.standart_behavior - Add Dropdown list element into general wrapper with dropdown toggle if param value is false.
     *
     * Use options.select_class_name: "popover-list" to show a popover
     */
	return function(options) {
		var selectsWrapper = document.getElementById(options.select_wrapper_id);
		var selects = selectsWrapper.getElementsByClassName(options.select_class_name);
		var selectsLength = selects.length;
		var i;

		for (i = 0; i < selectsLength; i++) {
			var ddown = new Dropdown(selects[i], options);
			ddown.initDropdowns();
		}
	}
})();




var contentPaddingCalc = {
	BORDER_BOTTOM : 20,
	
	recalculate : function () {
		var $afterBody = $('#AFTER_BODY');
		if (!$afterBody) {
			return;
		}
		$('body').removeClass('fullPageContainer');
		$('body').addClass('popupContainer');
		var paddingBottom = $afterBody.outerHeight();
		var $globalWrapTable = $('body>form>table#globalWrap');
		if ($globalWrapTable.length==1) {
			paddingBottom = paddingBottom - this.BORDER_BOTTOM;
			$globalWrapTable.css({"padding-bottom" : paddingBottom + "px"});
		} else if ($('div.popUpContent').length == 1) {
			$('div.popUpContent').css({"padding-bottom" : paddingBottom + "px"});
		} else {
			$('div.fullPageContent').css({"padding-bottom" : paddingBottom + "px"});
		}
		
		$('#PAGE_BODY').css({"padding-bottom": "0px"});
	}
}



function FullScreenSwitcher() {

    'use strict';
    this.init = function () {
        this.fullScreenMode = false;
        this.layout = findFramesetById('WEBAPPS_FRMSET');
		if ($(this.layout).attr('name') == 'WEBAPPS_FRMSET') {
			this.standardLayout = '130,0,100%,0';
			this.fullScreenLayout = '0,0,100%,0';
			this.menuBar = $('li.fullScreenMenuItem').find('a');
			this.showStandardScreen();
		} else {
			console.info('It is forbidden to use the "FullScreenSwitcher" function from this frameset.');
		}
		if (window.isEmbedAdmin){
		    this.sendMessageToParent()
		}
    }

    this.doSwitch = function () {
        this.fullScreenMode = !this.fullScreenMode;
        if (window.isEmbedAdmin){
            this.sendMessageToParent(this.fullScreenMode)
            return
        }
        if (this.fullScreenMode) {
            this.showFullScreen();
        } else {
            this.showStandardScreen();
        }
    }

    this.sendMessageToParent = function (state) {
        sendMessageToParent(JSON.stringify({key: "FULL_SCREEN_SWITCH", msg: { state: state } }));
    }

    this.showFullScreen = function () {
    	if (!this.menuBar) {
    		return;
    	}
    	
        this.menuBar.html(this.RestoreScreenButtonName);
        if (this.layout) {
        	this.layout.rows = this.fullScreenLayout;
        }
        var $table = $('table.reportStyleTable');
        $('#PAGE_CLOSE_FULL_SCREEN').removeClass('hidden');

        $('td.selectors, .reportToolBar', $table).hide();
    }

    this.showStandardScreen = function () {
    	if (!this.menuBar) {
    		return;
    	}
    	
        this.menuBar.html(this.FullScreenButtonName);
        if (this.layout) {
        	this.layout.rows = this.standardLayout;
        }

        var $table = $('table.reportStyleTable');
        $('#PAGE_CLOSE_FULL_SCREEN').addClass('hidden');

        $('td.selectors, .reportToolBar', $table).show();
    }

}

var fullScreenMode = new FullScreenSwitcher();
function collapseBreadcrumbs() {
  var breadcrumbsWidth;
  var breadcrumbs;
  var breadcrumbsToggler;
  
  function init() {
	  breadcrumbsWidth = $(".pageTitleFloat .fc").width();
	  breadcrumbs = $(".pageTitleFloat .pageTitleBreadcrumbs");
	  breadcrumbsToggler = $(".pageTitleFloat .breadcrumbsToggler");
	  toggleBC();
  }

  function toggleBC() {
	if(!breadcrumbs.html() || breadcrumbs.html() == '') {
		return;
	}
	  
    var pageTitleFloatWidth = $(".pageTitleFloat").width();
    var pageCommandBarWidth = $(".pageTitleFloat .commandBar").width();
    var closeFSButtonWidth = $(".closeFullScreenMode").width();

    breadcrumbsToggler.removeClass("hidden");
    breadcrumbs.addClass("hidden");

    if (breadcrumbsWidth + pageCommandBarWidth + closeFSButtonWidth > pageTitleFloatWidth) {
      return;
    }

    breadcrumbsToggler.addClass("hidden");
    breadcrumbs.removeClass("hidden");
  }

  init();
  $(window).on("load", init);
  $(window).on("resize", toggleBC);
}
var messageCounter = function() {
    var warningMsgs = 0;
    var errorMsgs = 0;
    var infoMsgs = 0;
    var successMsgs = 0;

    function applyNumberChanges(newValue, container) {
        $(container).html(newValue);
    }

    var returnObj = {
        addWarningMsg : function() {
            warningMsgs++;
            applyNumberChanges(warningMsgs, "#PAGE_WARNINGS_TAB .msgCounter");
        },
        addErrorMsg : function() {
            errorMsgs++;
            applyNumberChanges(errorMsgs, "#PAGE_ERRORS_TAB .msgCounter");
        },
        addInfoMsg : function() {
            infoMsgs++;
            applyNumberChanges(infoMsgs, "#PAGE_INFO_TAB .msgCounter");
        },
        addSuccessMsgs : function() {
            successMsgs++;
            applyNumberChanges(successMsgs, "#PAGE_MESSAGE_TAB .msgCounter");
        },
        clearErrors : function() {
            errorMsgs = 0;
            applyNumberChanges(errorMsgs, "#PAGE_ERRORS_TAB .msgCounter");
        },
        clearWarnings : function() {
            warningMsgs = 0;
            applyNumberChanges(warningMsgs, "#PAGE_WARNINGS_TAB .msgCounter");
        },
        clearInfoMsg : function() {
            infoMsgs = 0;
            applyNumberChanges(infoMsgs, "#PAGE_INFO_TAB .msgCounter");
        },
        clearSuccessMsgs: function() {
            successMsgs = 0;
            applyNumberChanges(successMsgs, "#PAGE_MESSAGE_TAB .msgCounter");
        }
    };

    return returnObj;
}();

function toggleHideAll() {
    if ($('.message-tab').not('.hidden').find('.active').length > 0) {
        $('.reset-tab .reset.hidden').removeClass('hidden');
        $(".messagesTabs").removeClass('empty');
    } else {
        $('.reset-tab .reset').addClass('hidden');
        $(".messagesTabs").addClass('empty');
    }
}

function toggleMessagesTab(e) {
    var currentAttrValue = $(this).attr('href');
    $(".messagesTabs").removeClass("empty");

    $(this).toggleClass("active");
    $(currentAttrValue).toggleClass("inactive").toggleClass("active");
    toggleHideAll();
    fixedTitleHeader.recalcPadding();

    e.preventDefault();
}

function clearContent(e) {
    $(".messagesTabs").addClass("empty");
    $('.message-tab .active').removeClass('active');
    $('.panes .active').removeClass('active').addClass('inactive');
    toggleHideAll();
    fixedTitleHeader.recalcPadding();
}

function adminClearPageMessages() {
    if (getDocElm('SHOW_PAGE_MESSAGE')) {
        adminHideErrors();
    }
    else {
        adminClearMessages();
    }
}
function adminHideAllMessages() {
    getDocElm('PAGE_MESSAGES').style.display = 'none';
    fixedTitleHeader.recalcPadding();
}

function adminShowAllMessages() {
    getDocElm('PAGE_MESSAGES').style.display = 'block';
    fixedTitleHeader.recalcPadding();
}

function adminHideInfo() {
    $('#PAGE_INFO_TAB').addClass('hidden');
    $('#PAGE_INFO').addClass('hidden');
    toggleHideAll();
    fixedTitleHeader.recalcPadding();
}
function adminShowInfo() {
    $('#PAGE_INFO_TAB').removeClass('hidden');
    $('#PAGE_INFO').removeClass('hidden');
    toggleHideAll();
    fixedTitleHeader.recalcPadding();
}

function adminHideMessage() {
    $('#PAGE_MESSAGE_TAB').addClass('hidden');
    $('#PAGE_MESSAGE').addClass('hidden');
    toggleHideAll();
    fixedTitleHeader.recalcPadding();
}
function adminShowMessage() {
    $('#PAGE_MESSAGE_TAB').removeClass('hidden');
    $('#PAGE_MESSAGE').removeClass('hidden');
    toggleHideAll();
    fixedTitleHeader.recalcPadding();
}

function adminHideWarnings() {
    $('#PAGE_WARNINGS_TAB').addClass('hidden');
    $('#PAGE_WARNINGS').addClass('hidden');
    toggleHideAll();
    fixedTitleHeader.recalcPadding();
}
function adminShowWarnings() {
    $('#PAGE_WARNINGS_TAB').removeClass('hidden');
    $('#PAGE_WARNINGS').removeClass('hidden');
    toggleHideAll();
    fixedTitleHeader.recalcPadding();
}

function adminHideErrors() {
    $('#PAGE_ERRORS_TAB').addClass('hidden');
    $('#PAGE_ERRORS').addClass('hidden');
    toggleHideAll();
    fixedTitleHeader.recalcPadding();
}
function adminShowErrors() {
    $('#PAGE_ERRORS_TAB').removeClass('hidden');
    $('#PAGE_ERRORS').removeClass('hidden');
    toggleHideAll();
    fixedTitleHeader.recalcPadding();
}

function adminCheckMessageHR() {
    // err,warning,message,info
    var bSep = false;
    if (getDocElm('PAGE_ERRORS_LIST').childNodes.length > 1) {
        bSep = true;
    }
    if (getDocElm('PAGE_WARNINGS_LIST').childNodes.length > 1) {
        bSep = true;
    }
    if (getDocElm('PAGE_MESSAGE_LIST').childNodes.length > 1) {
        bSep = true;
    }
    if (getDocElm('PAGE_INFO_LIST').childNodes.length > 1) {
        bSep = true;
    }
}

function adminAddListItem(obj, item) {
    obj.innerHTML = obj.innerHTML + "<div class='itm'>" + item + '</div>';
    if (obj.childNodes.length > 5) {
        if (obj.childNodes.length < 7) {
            recalculateMessagesContainerHeight();
        }
        obj.scrollTop = 1000;
    }
    fixedTitleHeader.recalcPadding();
}

function adminAddError(errorToAdd) {
    adminShowAllMessages();
    adminShowErrors();
    adminAddListItem(getDocElm('PAGE_ERRORS_LIST'), errorToAdd);
    adminCheckMessageHR();
    messageCounter.addErrorMsg();
    fixedTitleHeader.recalcPadding();
}

function adminAddInfo(intoToAdd) {
    adminShowAllMessages();
    adminShowInfo();
    adminAddListItem(getDocElm('PAGE_INFO_LIST'), intoToAdd);
    adminCheckMessageHR();
    messageCounter.addInfoMsg();
    fixedTitleHeader.recalcPadding();
}

function adminAddMessage(intoToAdd) {
    adminShowAllMessages();
    adminShowMessage();
    adminAddListItem(getDocElm('PAGE_MESSAGE_LIST'), intoToAdd);
    adminCheckMessageHR();
    messageCounter.addSuccessMsgs();
    fixedTitleHeader.recalcPadding();
}

function adminAddWarning(warnToAdd) {
    adminShowAllMessages();
    adminShowWarnings();
    adminAddListItem(getDocElm('PAGE_WARNINGS_LIST'), warnToAdd);
    adminCheckMessageHR();
    messageCounter.addWarningMsg();
    fixedTitleHeader.recalcPadding();
}

function adminHideMessagesIfClear() {
    if (getDocElm('PAGE_ERRORS_LIST').childNodes.length == 1
        && getDocElm('PAGE_WARNINGS_LIST').childNodes.length == 1
        && getDocElm('PAGE_MESSAGE_LIST').childNodes.length == 1
        && getDocElm('PAGE_INFO_LIST').childNodes.length == 1) {
        adminHideAllMessages();
    }
}

function adminClearMessages() {
    adminClearErrors();
    adminClearWarnings();
    adminClearMessage();
    adminClearInfo();
    adminHideMessagesIfClear();
}

function adminClearErrors() {
    adminRemoveListChildren(getDocElm('PAGE_ERRORS_LIST'));
    adminHideErrors();
    adminHideMessagesIfClear();
    messageCounter.clearErrors();
}
function adminClearWarnings() {
    adminRemoveListChildren(getDocElm('PAGE_WARNINGS_LIST'));
    adminHideWarnings();
    adminHideMessagesIfClear();
    messageCounter.clearWarnings();
}
function adminClearMessage() {
    adminRemoveListChildren(getDocElm('PAGE_MESSAGE_LIST'));
    adminHideMessage();
    adminHideMessagesIfClear();
    messageCounter.clearSuccessMsgs();
}
function adminClearInfo() {
    adminRemoveListChildren(getDocElm('PAGE_INFO_LIST'));
    adminHideInfo();
    adminHideMessagesIfClear();
    messageCounter.clearInfoMsg();
}

function collapseFSMode() {
  var closeFullScreenMode = $(".closeFullScreenMode");
  var closeFullScreenModeWidth = closeFullScreenMode.outerWidth(true);
  var closeButtonText = closeFullScreenMode.find("span");
  var titleBlockWidth;
  var pageCommandBarWidth;

  function toggleFSMode() {
    titleBlockWidth = $(".titleBlock").width();
    pageCommandBarWidth = $(".pageTitleFloat .commandBar").width();

    if (closeFullScreenModeWidth <= 30) {
      closeFullScreenModeWidth = $(".closeFullScreenMode").width();
    }

    closeButtonText.addClass("hidden");
    closeFullScreenMode.addClass("collapsed");

    if (pageCommandBarWidth + closeFullScreenModeWidth > titleBlockWidth) {
      return;
    }

    closeButtonText.removeClass("hidden");
    closeFullScreenMode.removeClass("collapsed");
  }
  
  toggleFSMode();
  $(window).on("resize", toggleFSMode);
}
window.HMenuSearchInit = (function () {
    function isClickable(element, parent) {
        // should stop if we achieve root search element
        if (element === parent || !element) {
            return false
        }
        // all result elements have onclick handler
        if (element.onclick) {
            return true
        }
        return isClickable(element.parentElement)
    }

	function HMenuSearch() {
		this.elem = $(".real-time-search input");
		this.resultList = $("#SystemSearchDiv");
		this.nav = $(".navBody");
		this.clearButton =  $(".clear-input-button");
	}

    HMenuSearch.prototype = {
        showResultList: function() {
             this.clearButton.show()
             this.resultList.show()
         },
        hideResultList: function() {
             if (!this.elem.val()) {
                this.clearButton.hide()
             }
             this.resultList.hide()
        },
        handleClearButtonClick: function() {
            this.clearInput()
            this.hideResultList()

            return false
        },
        hideHamburgerMenu: function(e) {
            if (e && !isClickable(e.target, this.resultList[0])) {
                e.preventDefault()
                e.stopPropagation()
                return
            }
             this.hideResultList();
             hideHamburgerMenu();
         },
        keyboardTextEnter: function(event) {
            if (event.keyCode == 38) {
                systemSeachHighlighPrev();
                disableEvent(event);
                return;
            }
            else if (event.keyCode == 40) {
                systemSeachHighlighNext();
                disableEvent(event);
                return;
            }
            else if (event.keyCode == 13) {
                systemSeachHighlighGoTo();
                disableEvent(event);
                this.hideHamburgerMenu();
                return;
            }

            var str = this.elem.val()
            if (str.length > 0) {
                cleanServerSearchResults()
                runSystemSearch(str, 'topLeft')
                this.showResultList()
            } else {
                this.showRecentSearchResults()
            }

          return true;
        },
        handleInputFocus: function (e) {
            if (this.elem.val().length === 0) {
                this.showRecentSearchResults()
            } else {
                this.showResultList()
            }
        },
        clearInput: function () {
            this.elem.val('')
        },
        showRecentSearchResults: function() {
            var results = recentMenuSearches
            if (results && results.length > 0) {
                cleanServerSearchResults()
                cleanMenuResults()

                renderSearchResults(results)
                this.showResultList()
                console.log('showing results')
            } else {
                this.hideResultList()
            }
        },
        initSearch: function() {
            this.elem.on('keyup', '', this.keyboardTextEnter.bind(this));
            this.elem.on('focus', '', this.handleInputFocus.bind(this));
            this.resultList[0].addEventListener('click', this.hideHamburgerMenu.bind(this), true);
            this.nav.on('click', '.navMenu', this.hideResultList.bind(this));
            this.clearButton.on('click', '', this.handleClearButtonClick.bind(this));
        }
    }

	return function(options) {
        var search = new HMenuSearch();
    	search.initSearch();
    	window.HMenuSearch = search
    	getRecentSearchResults()
	}
})();

var HMenu = (function () {
    function HMenu() {

        this.context = ''
        this.el = $('#_hmenu')
        this.focusable = null
    }

    HMenu.prototype = {
        init: function () {
            this.events()
        },
        events: function () {
            this.el.on('click', '.menu-tabs button', this.switchMenuTab.bind(this))
        },

        switchMenuTab: function (e) {
            var tab_id = $(e.currentTarget).attr('data-tab'),
                tabContainer = $(e.currentTarget).closest('ul'),
                tabContent = $('.tab-content')
            tabContent.removeClass('current').find('.menu-visible, .menu-active, .active')
                .removeClass('menu-visible menu-active active')

            tabContainer.find('.current').removeClass('current')

            $(e.currentTarget).parent()
                .addClass('current')

            var newTab = $('#' + tab_id)
            newTab.addClass('current')

            var idx = $(e.currentTarget).attr('data-tab-id')
            this.saveTabSelection(idx)
        },

        saveTabSelection: function (index) {
            $.ajax({
                url: '/ta/rest/ui/navigation/tabs/HCM_HAMBURGER_MENU',
                headers: {'X-XSRF-TOKEN': readCookie('XSRF-TOKEN')},
                type: 'PUT',
                contentType: 'application/json',
                data: JSON.stringify({'selected': index}),
                dataType: 'json'
            })
        },

        savePinState: function (pinned) {
            $.ajax({
                url: '/ta/rest/ui/navigation/tabs/HCM_HAMBURGER_MENU',
                headers: {'X-XSRF-TOKEN': readCookie('XSRF-TOKEN')},
                type: 'PUT',
                contentType: 'application/json',
                data: JSON.stringify({'pinned': pinned}),
                dataType: 'json'
           })
        }
    }

    return function (options) {
        var menu = new HMenu();
        menu.init();
        return menu
    }
})();

(function() {
  var CropperOptions = {
    viewMode: 2,
    dragMode: "move",
    aspectRatio: 1 / 1,
    checkOrientation: false,
    guides: false,
    background: false,
    rotatable: false,
    minCropBoxWidth: 80,
    minCropBoxHeight: 80,
    zoomOnWheel: false,
    zoomable: false,
    zoomOnTouch: false,
    movable: false
  };

  function transformMeta(data) {
    return ["x", "y", "width", "height"].reduce(function(cropMeta, key) {
      if (data.hasOwnProperty(key)) {
        cropMeta[key] = data[key];
      }
      return cropMeta;
    }, {});
  }

  function PhotoEdit() {
    this.$el = $("#photo-edit-popup");
    this.$imagePreview = this.$el.find("#image-preview");
    this.$cropDataInput = this.$el.find("#crop-data");

    this.onCrop = this.onCrop.bind(this);
    this.getCropData = this.getCropData.bind(this);
    this.setCropData = this.setCropData.bind(this);

    this.initCropper();
  }

  PhotoEdit.prototype.getCropData = function getCropData() {
    try {
      var data = JSON.parse(this.$cropDataInput.val());
      $.extend(data, {
        scaleX: 1,
        scaleY: 1
      })
      return data
    } catch (e) {
      // is data wasn't passed into field JSON.parse will fail.
      return {};
    }
  };

  PhotoEdit.prototype.setCropData = function setCropData(data) {
    try {
      this.$cropDataInput.val(JSON.stringify(transformMeta(data)));
    } catch (e) {
      console.error(e);
    }
  };

  PhotoEdit.prototype.initCropper = function initCropper() {
    this.cropper = new Cropper(
      this.$imagePreview[0],
      $.extend(
        {
          crop: this.onCrop,
          data: this.getCropData()
        },
        CropperOptions
      )
    );
  };

  PhotoEdit.prototype.onCrop = function onCrop(e) {
    this.setCropData(e.detail);
  };

  window.initUploadPhoto = function initUploadPhoto() {
    var photoEdit = new PhotoEdit();
  };
})();

function openAccountQuickLinks(accountId, prms) {
    if (window.isBlended) {
        HMenuSearch.hideHamburgerMenu()
    } else {
        hideHamburgerMenu();
    }

    var activeFrame = getActiveFrame()
    if (activeFrame.name === 'HCM_CENTER') {
        activeFrame.hidePopUp()
        activeFrame.hideConfirmDialog()
        activeFrame.SPA_CENTER.__chanel.post('MSG_OPEN_ACCOUNT_QUICK_LINKS_POPUP', { accountId: accountId })
    } else {
        var spa = _getFrameByName('SPA_CENTER', activeFrame)
        if (spa) {
            activeFrame.hidePopUp()
            activeFrame.hideConfirmDialog()
            spa.__chanel.post('MSG_OPEN_ACCOUNT_QUICK_LINKS_POPUP', { accountId: accountId })
        } else {
            activeFrame.showPopUp(prms)
        }
    }
}

(function () {
  var MESSAGING_INTERVAL = 10 * 1000;
  if (!window.User) {
    return
  }

  var person_id = window.User.person_id;
  var intervalId = null;

  function sendMessage() {
    if (window.opener) {
      var message = JSON.stringify({
        person_id: person_id,
        session_active: true
      });
      window.opener.postMessage(message, '*');
    }
  }

  function UtliProSessionService() {}

  UtliProSessionService.prototype.init = function () {
    if (window.opener && window.User.person_id) {
      this.startMessaging();
    }
  };

  UtliProSessionService.prototype.startMessaging = function () {
    intervalId = setInterval(sendMessage, MESSAGING_INTERVAL);
  };

  UtliProSessionService.prototype.stopMessaging = function () {
    window.clearInterval(intervalId);
  };

  window.UtliProSessionService = new UtliProSessionService();

  window.UtliProSessionService.init()
})();



