if (typeof(bfPage) == 'undefined'){
  var bfPage = {};
}
bfPage.oTypes = {
  'frm': 1,
  'tbl': 1,
  'other': 1
};
bfPage.oSelInput = null;
bfPage.init = function(){
  if (typeof(this.oCache) == 'undefined'){
    this.oCache = {};
  }
  this.oChanges = {};
  var sType;
  for (sType in this.oTypes){
    if (typeof(this.oCache[sType]) == 'undefined'){
      this.oCache[sType] = {};
    };
    this.oChanges[sType] = {};
  }
  jsHelper.setEvent(document,'onclick',bfPage.setSelInput,'bfPage::init');
}
bfPage.setSelInput = function(oEvent){
  var oEvent = window.event || oEvent;
  var oNode = oEvent.target || oEvent.srcElement;
  if (typeof(oNode) != 'undefined' && oNode && ((oNode.tagName == 'INPUT' && oNode.type == 'text') || oNode.tagName == 'TEXTAREA')){
    bfPage.oSelInput = oNode;
  }
}
bfPage.tblFixedLayout = function(sId){
  var sId = sId || '_data';
  var oTblSrc = null;
  var jqTrColDef = null;
  if ((oTblSrc = document.getElementById(sId)) && oTblSrc.getElementsByTagName('colgroup').length > 0 && (jqTrColDef = $('.selColGroup:first',oTblSrc)).length > 0){
    var oTbl = bfPage.createElement('table',{
      'className':oTblSrc.className,
      'style':{
        'tableLayout':'auto',
        'position':'absolute',
        'top':'-1000px'
      }
    });
    document.body.appendChild(oTbl);
    var oColgrpSrc = oTblSrc.getElementsByTagName('colgroup')[0];
    var oColgrp = oColgrpSrc.cloneNode(true)
    oTbl.appendChild(oColgrp);
    var oTBdy = bfPage.createElement('tbody');
    oTbl.appendChild(oTBdy);
    var oTrColDef = jqTrColDef[0].cloneNode(true);
    oTrColDef.style.display = '';
    oTBdy.appendChild(oTrColDef);
    var aoCols = oColgrp.getElementsByTagName('col');
    var aoColsSrc = oColgrpSrc.getElementsByTagName('col');
    for (var i=0;i<aoCols.length;i++){
      if (aoCols[i].width == '1%'){
        aoColsSrc[i].width = oTrColDef.cells[i].offsetWidth+'px';
      }
    }
    oTblSrc.style.tableLayout = 'fixed';
    oTblSrc.style.visibility = '';
    oTbl.parentNode.removeChild(oTbl);
    jsHelper.setEvent(oTblSrc,'onmousemove','bfPage.autocut.ctrl(oEvent,\''+sId+'\');','bfPage::tblFixedLayout');
    jsHelper.setEvent(oTblSrc,'onmouseout','bfPage.autocut.delTimeout();','bfPage::tblFixedLayout');
  }
}
bfPage.autocut = {};
bfPage.autocut.oLastTgt = null;
bfPage.autocut.close = function(oTbl){
  bfPage.autocut.oLastTgt = null;
  oTbl.style.display = 'none';
  document.body.appendChild(oTbl);
}
bfPage.autocut.oTimeout = null;
bfPage.autocut.delTimeout = function(){
  if (bfPage.autocut.oTimeout){
    window.clearTimeout(bfPage.autocut.oTimeout);
    bfPage.autocut.oTimeout = null;
  }
}
bfPage.autocut.ctrl = function(oEvent,sId){
  var oTgt = (oEvent.target) ? oEvent.target : oEvent.srcElement;
  while (oTgt && (oTgt.nodeName == 'undefined' || oTgt.nodeName != 'TD' || typeof(oTgt.className) == 'undefined' || oTgt.className.indexOf('autocut') < 0)){
    oTgt = oTgt.parentNode;
  }
  function displayOverflow(){
    bfPage.autocut.oLastTgt = oTgt;
    var oTbl = null;
    var oTblSrc  = jsHelper.getTable(oTgt);
    if ((oTbl = document.getElementById('autocut_'+sId))){
      var oTBdy = jsHelper.getTBody(oTbl);
      while (oTBdy.childNodes.length > 0){
        oTBdy.removeChild(oTBdy.firstChild);
      }
    }else{
      var oTBdySrc = jsHelper.getTBody(oTblSrc);
      var oTbl   = oTblSrc.cloneNode(false);
      var oTBdy  = oTBdySrc.cloneNode(false);
      oTbl.id = 'autocut_'+sId;
      oTbl.style.position = 'absolute';
      oTbl.style.opacity = 0.8;
      oTbl.style.width = '';
      oTbl.style.tableLayout = '';
      oTbl.style.margin = '0px';
      oTbl.appendChild(oTBdy);
      jsHelper.setClass(oTbl,0,'table_data_width');
    }
    document.body.appendChild(oTbl);
    oTbl.style.display = '';
    oTbl.style.top = '-1000px';
    var oTrSrc = jsHelper.getTr(oTgt);
    var oTr = oTrSrc.cloneNode(false);
    oTr.id = '';
    oTBdy.appendChild(oTr);
    var oTd = oTgt.cloneNode(true);
    oTr.appendChild(oTd);
    aoAutocut = $('div.autocut',oTd);
    if (typeof(aoAutocut[0]) != 'undefined'){
      jsHelper.setClass(aoAutocut[0],0,'autocut');
      aoAutocut[0].style.width = '';
    }
    if (typeof(oTrSrc.id) != 'undefined' && typeof(shTree) != 'undefined' && typeof(shTree['hData'][oTblSrc.id]) != 'undefined' && oTgt.innerHTML.indexOf('autocut') >= 0){
      shTree.sActTbl = oTblSrc.id;
      var sCSpan = ((typeof(oTgt.colSpan) != 'undefined' && oTgt.colSpan != null) ? oTgt.colSpan : 0).toString();
      var iColWidth = shTree.getData('colWidth')[sCSpan];
      var iDivWidth = parseInt($('div.autocut',oTgt)[0].style.width);
      var iNewDivWidth = parseInt(aoAutocut[0].offsetWidth);
      oTd.style.width = (iColWidth-iDivWidth+iNewDivWidth+10)+'px';
      oTbl.style.width = (iColWidth-iDivWidth+iNewDivWidth+10)+'px';
    }
    if (oTd.offsetWidth >= oTgt.offsetWidth){
      oTd.style.height = oTgt.offsetHeight+'px';
      oTd.style.paddingRight = '6px';
      oTd.style.whiteSpace = 'nowrap';
      if (typeof(oTr.style.backgroundColor) == 'undefined' || oTr.style.backgroundColor.length == 0){
        oTr.style.backgroundColor = '#ffffff';
      }
      jsHelper.setClass(oTd,0,'autocut');
      jsHelper.setClass(oTd,0,'td_rightline');
      jsHelper.setEvent(oTbl,'onmouseout','bfPage.autocut.close(this);');
      oTgt.appendChild(oTbl);
      var hOffset = $(oTgt).position();
      var oTmp = oTgt.parentNode;
      var iScroll = 0;
      while (oTmp && iScroll == 0){
        if (oTmp.nodeName != 'HTML' && oTmp.nodeName != 'BODY' && oTmp.scrollTop > 0){
          iScroll = oTmp.scrollTop;
        }
        oTmp = oTmp.parentNode;
      }
      oTbl.style.top  = hOffset['top']+iScroll+'px';
      oTbl.style.left = hOffset['left']+'px';
    }else{
      oTbl.style.display = 'none';
    }
  }
  bfPage.autocut.delTimeout();
  if (oTgt && oTgt != bfPage.autocut.oLastTgt){
    bfPage.autocut.oTimeout = window.setTimeout(displayOverflow,200);
  }
}
bfPage.hashCompare = function(hFst,hScnd){
  var bRet = 1;
  var sKey;
  for (sKey in hFst){
    if (typeof(hScnd[sKey]) == 'undefined'){
      bRet = 0;
    }else if (typeof(hFst[sKey]) != typeof(hScnd[sKey])){
      bRet = 0;
    }else if (typeof(hFst[sKey]) == 'object'){
      bRet = this.hashCompare(hFst[sKey],hScnd[sKey]);
    }else if (hFst[sKey] != hScnd[sKey]){
      bRet = 0;
    }
    if (!bRet){
      break;
    }
  }
  for (sKey in hScnd){
    if (typeof(hFst[sKey]) == 'undefined'){
      return 0;
    }
  }
  return bRet;
}
bfPage.cacheData = function(oData,bLogChanges,bForceLog){
  if (typeof(bLogChanges) == 'undefined'){
    var bLogChanges = 0;
  }
  if (typeof(bForceLog) == 'undefined'){
    var bForceLog = 0;
  }
  var sKey;
  var sType;
  var bChanged;
  if (!bLogChanges){
    for (sKey in oData){
      bfPage.oCache[sKey] = oData[sKey];
    }
  }else{
    for (sType in this.oTypes){
      this.oChanges[sType] = new Object();
      for (sKey in oData[sType]){
        bChanged = (bForceLog || typeof(this.oCache[sType][sKey]) == 'undefined' || oData[sType][sKey]['checksum'] != this.oCache[sType][sKey]['checksum']) ? 1 : 0;
        this.oCache[sType][sKey] = oData[sType][sKey];
        if (bChanged){
          this.oChanges[sType][sKey] = 1;
        }
      }
    }
  }
}
bfPage.createElement = function(sType,hProperties,sInnerHtml,oDoc){
  if (typeof(oDoc) == 'undefined'){
    var oDoc = document;
  }
  var sKey,sSubKey;
  if (typeof(hProperties) == 'undefined' || typeof(hProperties['name']) == 'undefined'){
    var oEl = oDoc.createElement(sType);
  }else{
    try{
      var oEl = oDoc.createElement('<'+sType+' name=\''+hProperties['name']+'\'>');
    }catch(e){
      var oEl = oDoc.createElement(sType);
      oEl.name = hProperties['name'];
    }
    delete hProperties['name'];
  }
  if (typeof(hProperties) == 'object'){
    for (sKey in hProperties){
      var xProp = hProperties[sKey];
      if (typeof(xProp) == 'string'){
        oEl[sKey] = xProp;
      }else if (typeof(xProp) == 'object'){
        for (sSubKey in xProp){
          try{
            oEl[sKey][sSubKey] = xProp[sSubKey];
          }catch(e){
            alert(oEl.nodeName+'::'+sKey+'->'+sSubKey+':'+xProp[sSubKey]);
          }
        }
      }
    }
  }
  if (typeof(sInnerHtml) != 'undefined' && sInnerHtml != ''){
    oEl.innerHTML = sInnerHtml;
  }
  return oEl;
}

if (typeof(bfPage.layerAutoClose) == 'undefined'){
  bfPage.layerAutoClose = {'ahLayers': new Array()};
}
bfPage.layerAutoClose.markOpenLayers = function(){
  for (var i=0; i<bfPage.layerAutoClose.ahLayers.length; i++){
    if (bfPage.layerAutoClose.ahLayers[i]['bOpen'] && bfPage.layerAutoClose.ahLayers[i]['oEl'].style.display != 'none'){
      bfPage.layerAutoClose.ahLayers[i]['bOpenOnMDown'] = 1;
    }
  }
}
bfPage.layerAutoClose.enableEvent = function(iLayer){
  jsHelper.enableEvent(bfPage.layerAutoClose.ahLayers[iLayer]['oCaller'],'onclick');
}
bfPage.layerAutoClose.closeOpenLayers = function(bNoTimeout,bIgnoreMouseOver){
  var bNoTimeout = bNoTimeout || 0;
  var bIgnoreMouseOver = bIgnoreMouseOver || 0;
  for (var i=0; i<bfPage.layerAutoClose.ahLayers.length; i++){
    var hLayer = bfPage.layerAutoClose.ahLayers[i];
    if (hLayer['bOpen'] && hLayer['bOpenOnMDown'] && (bIgnoreMouseOver || !hLayer['bMouseover'])){
      hLayer['bOpen'] = 0;
      hLayer['fctClose'].apply(window,hLayer['axCloseArgs']);
      if (hLayer['oCaller']){
        if (bNoTimeout){
          bfPage.layerAutoClose.enableEvent(i);
        }else{
          window.setTimeout('bfPage.layerAutoClose.enableEvent('+i+')',200);
        }
      }
    }
    hLayer['bOpenOnMDown'] = 0;
  }
}
bfPage.layerAutoClose.openLayer = function(oTgt,oCaller,fctClose,axCloseArgs,bForcedClose){
  if (typeof(axCloseArgs) == 'undefined'){
    var axCloseArgs = new Array();
  }
  if (typeof(bForcedClose) == 'undefined'){
    bForcedClose = 0;
  }
  if (jsHelper.getEvent(document,'onclick','bfPage::layerAutoClose').length == 0){
    jsHelper.setEvent(document,'onclick','bfPage.layerAutoClose.closeOpenLayers();','bfPage::layerAutoClose');
  }
  if (jsHelper.getEvent(document,'onmousedown','bfPage::layerAutoClose').length == 0){
    jsHelper.setEvent(document,'onmousedown','bfPage.layerAutoClose.markOpenLayers();','bfPage::layerAutoClose');
  }
  var bAdd = 1;
  var iLayer;
  for (var i=0; i<bfPage.layerAutoClose.ahLayers.length; i++){
    if (bfPage.layerAutoClose.ahLayers[i]['oEl'] == oTgt && bfPage.layerAutoClose.ahLayers[i]['oCaller'] == oCaller){
      bAdd = 0;
      iLayer = i;
      break;
    }
  }
  if (bAdd){
    var hLayer = {
      'oEl': oTgt,
      'oCaller': oCaller,
      'bOpen': 0,
      'bOpenOnMDown': 0,
      'bMouseover': 0,
      'fctClose': fctClose,
      'axCloseArgs': axCloseArgs
    };
    bfPage.layerAutoClose.ahLayers.push(hLayer);
    iLayer = bfPage.layerAutoClose.ahLayers.length - 1;
    if (typeof(oTgt.id) == 'undefined' || !oTgt.id){
      oTgt.id = 'bfPage_layerAutoClose'+iLayer;
    }
  }
  if (!bForcedClose){
    jsHelper.setEvent(oTgt,'onmouseover','bfPage.layerAutoClose.ahLayers['+iLayer+'][\'bMouseover\'] = 1;','bfPage::layerAutoClose');
    jsHelper.setEvent(oTgt,'onmouseout','bfPage.layerAutoClose.ahLayers['+iLayer+'][\'bMouseover\'] = 0;','bfPage::layerAutoClose');
  }
  var joLayer = $(bfPage.layerAutoClose.ahLayers[iLayer]['oEl']);
  if (joLayer[0].style.position != 'absolute'){
    joLayer[0].style.left = '';
    if (joLayer.offset()['left']+joLayer.outerWidth() > $(window).width()){
      joLayer[0].style.left = (parseInt(joLayer.position()['left'])-parseInt(joLayer.outerWidth())+parseInt($(jsHelper.getTable(joLayer[0])).outerWidth()))+'px';
    }
  }
  bfPage.layerAutoClose.ahLayers[iLayer]['bOpen'] = 1;
  if (bfPage.layerAutoClose.ahLayers[iLayer]['oCaller']){
    jsHelper.disableEvent(bfPage.layerAutoClose.ahLayers[iLayer]['oCaller'],'onclick');
  }
}
bfPage.getElementsByClassName = function(oSrc,sClass,oReg){
  if (typeof(oReg) == 'undefined'){
    var oReg = new RegExp("(\\b|^)"+sClass+"(\\b|$)",'i');
  }
  var aoElements = [];
  if (typeof(oSrc.getElementsByClassName) == 'function'){
    aoElements = oSrc.getElementsByClassName(sClass);
  }else{
    if (oSrc.firstChild){
      var oChild = oSrc.firstChild
      while (oChild){
        if (typeof(oChild.className) == 'string' && oChild.className.indexOf(sClass) >= 0 && oChild.className.match(oReg)){
          aoElements.push(oChild);
        }
        if (oChild.firstChild){
          aoElements = aoElements.concat(bfPage.getElementsByClassName(oChild,sClass,oReg));
        }
        oChild = oChild.nextSibling;
      }
    }
  }
  return aoElements;
}
bfPage.fixHScroll = function(oCntr){
  var iSWidth = (typeof(oCntr.style) != 'undefined') ? parseInt(oCntr.style.width) : 0;
  var iWidth = (oCntr.clientWidth > 0) ? oCntr.clientWidth : ((!isNaN(iSWidth)) ? iSWidth : 0);
  if (iWidth > 0){
    var oChild = oCntr.firstChild;
    while (oChild){
      if (typeof(oChild.tagName) != 'undefined' && (oChild.tagName == 'TABLE' || oChild.tagName == 'DIV')){
        var iTmpWidth = (typeof(oChild.style) != 'undefined') ? parseInt(oChild.style.width) : null;
        oChild.style.width = iWidth+'px';
      }
      if (typeof(oChild.id) != 'undefined' && typeof(shTree) != 'undefined' && typeof(shTree['hData'][oChild.id]) != 'undefined' && iTmpWidth != iWidth){
        shTree.resetColWidth(oChild.id,iTmpWidth-iWidth);
      }
      oChild = oChild.nextSibling;
    }
  }
}
bfPage.createSelect = function(sName,hParams){
  var hOptions = hParams['options'] || null;
  var aiRange  = hParams['range']   || null;
  var sPrefix  = hParams['prefix']  || '';
  var sPostfix = hParams['postfix'] || '';

  var oSelect = bfPage.createElement('select',{
    'name':sName,
    'className':'form_text'
  });
  if (!hOptions && aiRange){
    hOptions = {};
    for (var i=aiRange[0];i<aiRange[1];i++){
      hOptions[i.toString()] = i.toString();
    }
  }
  if (hOptions){
    if (sPrefix.length > 0 || sPostfix.length > 0){
      for (var sKey in hOptions){
        hOptions[sKey] = sPrefix+hOptions[sKey]+sPostfix;
      }
    }
    jsHelper.selectAddOptions(oSelect,hOptions);
  }
  return oSelect;
}
bfPage.createTbl = function(iCols,asWidth,hStyles,hOpt){
  var hDef = {
    'fixed_layout': 0,
    'tpl_rows'    : 0
  }
  for (var sKey in hDef){
    if (typeof(hOpt) == 'undefined'){
      hOpt = {};
    }
    hOpt[sKey] = hOpt[sKey] || hDef[sKey];
  }
  var iCols = iCols || 0;
  var asWidth = asWidth || null;
  var hStyles = hStyles || {};
  if (hOpt['fixed_layout']){
    hStyles['visibility'] = 'hidden';
  }
  var oTbl = bfPage.createElement('table',{'className':'table_plain','style':hStyles});
  if (asWidth){
    var oColGrp = bfPage.createElement('colgroup');
    oTbl.appendChild(oColGrp);
    for (var i=0;i<iCols;i++){
      var oCol = bfPage.createElement('col',{'width':asWidth[i]});
      oColGrp.appendChild(oCol);
    }
  }
  var oTHead = bfPage.createElement('thead');
  oTbl.appendChild(oTHead);
  var oTr = bfPage.createElement('tr',{'style':{'display':'none'}});
  if (hOpt['fixed_layout']){
    oTr.className = 'selColGroup';
  }
  oTHead.appendChild(oTr);
  for (var i=0;i<iCols;i++){
    var oTd = bfPage.createElement('td');
    oTr.appendChild(oTd);
  }
  if (hOpt['tpl_rows'] > 0){
    for (var j=0;j<hOpt['tpl_rows'];j++){
      var oTr = bfPage.createElement('tr',{'className':'selTpl','style':{'display':'none'}});
      oTHead.appendChild(oTr);
      for (i=0;i<iCols;i++){
        var oTd = bfPage.createElement('td');
        oTr.appendChild(oTd);
      }
    }
  }
  var oTBdy = bfPage.createElement('tbody');
  oTbl.appendChild(oTBdy);
  if (hOpt['rows'] > 0){
    for (var j=0;j<hOpt['rows'];j++){
      var oTr = bfPage.createElement('tr');
      oTBdy.appendChild(oTr);
      for (i=0;i<iCols;i++){
        var oTd = bfPage.createElement('td');
        oTr.appendChild(oTd);
      }
    }
  }
  return oTbl;
}
bfPage.reloadMenu = function(hParams){
  if (typeof(hParams) == 'undefined'){
    shRpc.aCall('data/getMenu/',null,'bfPage.reloadMenu');
    return;
  }else{
    var hMenu  = hParams['data']['menu'];
    var hNodes = hParams['data']['nodes'];
  }
  var iActiveMeid = getCookieVal('active_meid');
  var oCntr = bfPage.createElement('div');

  //Templates
  var oTplUlCol = bfPage.createElement('ul');
  var oLi = bfPage.createElement('li',{
    'className':'hand menu_cntr_head'
  });
  oTplUlCol.appendChild(oLi);
  var oDiv = bfPage.createElement('div',{
    'title':'expander',
    'className':'ico16 hand ico_tree_close',
    'style':{'display':'none'}
  });
  oLi.appendChild(oDiv);
  var oTplMenuCntr = bfPage.createElement('ul',{'className':'menu_cntr'});
  var oTplLiEntry = bfPage.createElement('li');
  var oDiv = bfPage.createElement('div',{
    'className':'float_left menu_ico'
  });
  oTplLiEntry.appendChild(oDiv);
  var oImg = bfPage.createElement('img',{
    'style':{'visibility':'hidden'}
  });
  oDiv.appendChild(oImg);
  var oTplClear = bfPage.createElement('div',{'style':{'clear':'both'}});
  var oTplFoot = bfPage.createElement('ul',{'className':'menu_cntr_foot'});
  oTplFoot.appendChild(bfPage.createElement('li'));

  for (var i in hMenu){
    var hColumn = hMenu[i];
    if (!jsHelper.objIsEmpty(hColumn['entrys'])){
      //menu head
      var oUl = oTplUlCol.cloneNode(true);
      oCntr.appendChild(oUl);
      var oLi = oUl.getElementsByTagName('li')[0];
      var oDiv = oLi.getElementsByTagName('div')[0];
      oLi.id = '/menu'+hColumn['mcid']+'/';
      oLi.lang = (typeof(hNodes['/menu'+hColumn['mcid']+'/']) != 'undefined') ? hNodes['/menu'+hColumn['mcid']+'/'].toString() : "1";
      jsHelper.setEvent(oLi,'onclick','switchMenu(this);');
      jsHelper.setEvent(oDiv,'onclick','switchMenu(this);');
      oLi.appendChild(document.createTextNode(hColumn['name']));

      //menu entries
      var oUl = oTplMenuCntr.cloneNode(true);
      oCntr.appendChild(oUl);
      for (var j in hColumn['entrys']){
        var hEntry = hColumn['entrys'][j];
        var oLi = oTplLiEntry.cloneNode(true);
        oLi.className = 'hand menu_entry'+((iActiveMeid == hEntry['meid']) ? ' menu_selected' : '');
        oLi.id = '/menu'+hColumn['mcid']+'/entry'+hEntry['meid']+'/';
        oUl.appendChild(oLi);
        jsHelper.setEvent(oLi,'onclick','menuGotoEntry({\'typ\':\''+hEntry['typ']+'\',\'link\':\''+hEntry['link']+'\',\'meid\':\''+hEntry['meid']+'\'});');
        var sIcon = _iconset+((hEntry['icon']) ? hEntry['icon'] : 'main/pointer2_left.gif');
        var oDiv = oLi.getElementsByTagName('div')[0];
        oDiv.style.backgroundImage = 'url('+sIcon+')';
        var oImg = oDiv.getElementsByTagName('img')[0];
        oImg.src = sIcon;
        oLi.appendChild(document.createTextNode(hEntry['name']));
        oLi.appendChild(oTplClear.cloneNode(true));
      }

      //menu foot
      oCntr.appendChild(oTplFoot.cloneNode(true));
    }
  }
  var oOldMenu = document.getElementById('_menu_entrys');
  oOldMenu.parentNode.replaceChild(oCntr,oOldMenu);
  oCntr.id = '_menu_entrys';
  menuReExpand('_menu');
}


bfPage.init();
