var http_request = false;
var oDivWriteResponse = null;
var vFinalScript = '';
var CMSLoading  = null;
var oFunctionHandle = [];

var peranakan_museum_background = function () {
  this.imgsrc = function (sFolder) { return (this.imgFolder + 'bg_' + sFolder + '.jpg'); }
  this.items = ['contactus','exhibitions','home','joinmailinglist','joinus','learning','legal','pressroom',
    'privacypolicy','sitemap','supportus','themuseum','venuehire','visitus'];
  this.body_onLoad = function () {
    var dom = document.body;
    dom.background = this.bodybackground;
  }
  this.getProtocol = function (sn) { return ((sn.indexOf('https') > -1)?'https://':'http://'); }
  this.domainname = function (sn) {
    sn = (sn.indexOf('https') > -1)?sn.replace('https://', ''):sn.replace('http://', '');
    sn = sn.substring(0, sn.indexOf('/'));
    return sn;
  }
  this.filename = function (sn) {
    sn = sn.substring(sn.lastIndexOf('/')+1, sn.length);
    if (sn.indexOf('?') > 0) sn = sn.substring(0, sn.indexOf('?'));
    if (sn.indexOf('#') > 0) sn = sn.substring(0, sn.indexOf('#'));
    return sn;
  }
  this.scriptname = function (sn) {
    sn = (sn.indexOf('https') > -1)?sn.replace('https://', ''):sn.replace('http://', '');
    sn = sn.substring(sn.indexOf('/'), sn.length);
    if (sn.indexOf('?') > 0) sn = sn.substring(0, sn.indexOf('?'));
    if (sn.indexOf('#') > 0) sn = sn.substring(0, sn.indexOf('#'));
    return sn;
  }
  this.scriptpath = function (url) {
    var sn = this.scriptname(url);
    var fn = this.filename(url);
    var sReturn = sn.substring(0, sn.length - fn.length)
    return (sReturn.toLowerCase());
  }
  this.pagePath = this.scriptpath(window.location.toString());
  if (this.pagePath == '/ecards/') this.pagePath = '/supportus/';
  this.imgFolder = '/img/background/';
  this.bodybackground = this.imgsrc(this.pagePath.substring(1, this.pagePath.length - 1));
}
var _pmbg = new peranakan_museum_background();

function loadIf_RequestExist(url, sFunctionExist, sFunctionNotExist) {
  http_request = false;
  oFunctionHandle.sExist    = sFunctionExist;
  oFunctionHandle.sNotExist = sFunctionNotExist;

  if (window.XMLHttpRequest) { // Mozilla, Safari,...
    http_request = new XMLHttpRequest();
  }
  else if (window.ActiveXObject) { // IE
    try {
      http_request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        http_request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {}
    }
  }
  if (!http_request) {
    alert('Cannot create XMLHTTP instance');
    return false;
  }

  http_request.onreadystatechange = isRequestExist;
  http_request.open('head', url, true);
  http_request.send(null);
}

function isRequestExist() {
  if (http_request.readyState == 4) {
    //if (http_request.status == 200) {
    if ((http_request.status == 200) || (http_request.status == 501)){
      if (oFunctionHandle.sExist) eval(oFunctionHandle.sExist);
      oFunctionHandle = [];
    } else {
      if (oFunctionHandle.sNotExist) eval(oFunctionHandle.sNotExist);
      oFunctionHandle = [];
      return false;
    }
  }
}

function makeGetRequest(url, parameters) {
  http_request = false;
  //show_LoadingOverlay();
  if (window.XMLHttpRequest) { // Mozilla, Safari,...
    http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType) {
      // set type accordingly to anticipated content type
      //http_request.overrideMimeType('text/xml');
      http_request.overrideMimeType('text/html');
    }
  } else if (window.ActiveXObject) { // IE
    try {
      http_request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        http_request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {}
    }
  }
  if (!http_request) {
    alert('Cannot create XMLHTTP instance');
    return false;
  }
  parameters = (parameters.substring(0,1) == '?')?parameters:'?' + parameters;
  http_request.onreadystatechange = alertContents;
  http_request.open('GET', url + parameters, true);
  http_request.send(null);
}

function makePOSTRequest(url, parameters) {
  http_request = false;
  show_LoadingOverlay();
  if (window.XMLHttpRequest) { // Mozilla, Safari,...
    http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType) {
      // set type accordingly to anticipated content type
      //http_request.overrideMimeType('text/xml');
      http_request.overrideMimeType('text/html');
    }
  } else if (window.ActiveXObject) { // IE
    try {
      http_request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        http_request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {}
    }
  }
  if (!http_request) {
    alert('Cannot create XMLHTTP instance');
    return false;
  }

  http_request.onreadystatechange = alertContents;
  http_request.open('POST', url, true);
  http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  http_request.setRequestHeader("Content-length", parameters.length);
  http_request.setRequestHeader("Connection", "close");
  http_request.send(parameters);
}

function alertContents() {
  if (http_request.readyState == 4) {
    clear_LoadingOverlay();
    if (http_request.status == 200) {
      result = http_request.responseText;
      var vRunScript = result.match(/\[RunScript\]([\S ]+)\[\/RunScript\]/i);
      if (vRunScript) {
        eval(vRunScript[1]);
        result = result.replace(/\[RunScript\]([\S ]+)\[\/RunScript\]/g, '');
      }
      if (oDivWriteResponse) oDivWriteResponse.innerHTML = result;
      if (vFinalScript != '') {
        eval(vFinalScript);
        vFinalScript = '';
      }
    } else {
      if (http_request.status == 500) oDivWriteResponse.innerHTML = http_request.responseText;
      alert('Unable to connect to server, please try again later.');
    }
  }
}

function CMS_encodeURI(text) {
  if (!text) return text;
  if (typeof(text) != 'string') return text;
  text = encodeURI(text);
  text = text.replace(/&/g, '%26');
  text = text.replace(/;/g, '%3B');
  return text;
}

function CMS_CustomDecodeURI(text) {
  if (!text) return text;
  if (typeof(text) != 'string') return text;
  //text = decodeURI(text);
  text = text.replace(/&amp;/g, '&');
  return text;
}

function getParameter_documentForm(sMethod, oForm, isIgnoreEmpty) {
  var sValue = '';
  var sReturn = '';
  var oInputs = oForm.getElementsByTagName('input');

  for (var i=0;i<oInputs.length;i++) {
    sValue = oInputs[i].value;
    if (oInputs[i].type == 'checkbox') sValue = (oInputs[i].checked)?((oInputs[i].value == '')?'1':oInputs[i].value):'0';
    if ((sValue == '') || (sValue == '0')) {
      if (!isIgnoreEmpty) sReturn = ((sReturn=='')?sReturn:sReturn+'&') + oInputs[i].name + '=' + CMS_encodeURI(sValue);
    } else {
      sReturn = ((sReturn=='')?sReturn:sReturn+'&') + oInputs[i].name + '=' + CMS_encodeURI(sValue);
    }
  }

  var oInputs = oForm.getElementsByTagName('select');
  for (var i=0;i<oInputs.length;i++) {
    sValue = oInputs[i].value;
    sReturn = ((sReturn=='')?sReturn:sReturn+'&') + oInputs[i].name + '=' + CMS_encodeURI(sValue);
  }

  var oInputs = oForm.getElementsByTagName('textarea');
  for (var i=0;i<oInputs.length;i++) {
    sValue = oInputs[i].value;
    sReturn = ((sReturn=='')?sReturn:sReturn+'&') + oInputs[i].name + '=' + CMS_encodeURI(sValue);
  }

  if (sReturn.indexOf('AjaxPost') == -1) sReturn = ((sReturn=='')?sReturn:sReturn+'&') + 'AjaxPost=1';
  if (sReturn.indexOf('Method') == -1) sReturn = ((sReturn=='')?sReturn:sReturn+'&') + 'Method=' + sMethod;
  return sReturn;
}

function mount_CMSEditableContents(iRowNum){
  //alert('mount_CMSEditableContents_iRowNum:['+iRowNum+']');
  var sField = '';
  var iCounter = 0;
  var oItems = [];
  var oTable = document.getElementById('CMSListContents');
  if (typeof oTable.getElementsByTagName('tr')[iRowNum] == 'undefined') {
    return;
  }
  else {
  var oTr = oTable.getElementsByTagName('tr')[iRowNum];
  var oTds = oTr.getElementsByTagName('td');
  for (var i=0; i<oTds.length; i++) {
    var oSpan = oTds[i].getElementsByTagName('span');
    for (var j=0; j<oSpan.length; j++) {
      var sName = oSpan[j].getAttribute('name');
      if (sName.indexOf("[") > 0) {
        var iIndex = sName.match(/\[([\S ]+)\]/i)[1];
        var sName  = sName.substring(0,sName.indexOf("["));
        for (var k=0; k<(parseInt(iIndex)+1); k++) {
          var sTemp = (k>0)?sTemp = sName + k:sTemp = sName;
          oItems[iCounter] = {fieldName:sTemp, fieldValue:oSpan[j].innerHTML};
          iCounter++;
        }
        iCounter--;
      } else {
        oItems[iCounter] = {fieldName:sName, fieldValue:oSpan[j].innerHTML};
      }
      iCounter++;
    }
  }

  for (var i=0; i<iCounter; i++) {
    sField = oItems[i].fieldName.replace(/[\[\]\{\}]/g, '');
    var oTarget = eval('document.CMSUpdate.' + sField);
    //alert(sField);
    if (oTarget) {
      //alert('found-' + oItems[i].fieldValue);
      oTarget.value = (oTarget.type == 'text')?CMS_CustomDecodeURI(oItems[i].fieldValue):oItems[i].fieldValue;
      if (oTarget.length) {
        if (oTarget[0].type == 'checkbox') {
          var sFieldValue = oItems[i].fieldValue;
          var arrFieldValue = sFieldValue.split(',');
          for (var j=0; j<oTarget.length; j++) {
            oTarget[j].checked = false;
            for (var k=0; k<arrFieldValue.length; k++) {
              if (oTarget[j].value == arrFieldValue[k]) oTarget[j].checked = true;
            }
          }
        }
      }

      if (oTarget.type == 'checkbox') {
        oTarget.checked = (oItems[i].fieldValue == '0')?false:true;
        var sFunction = oTarget.getAttribute("onMount");
        if (sFunction) eval(sFunction);
      }
      if (oTarget.type == 'select-one') {
        for (var j=0; j<oTarget.length; j++) {
          if (oItems[i].fieldValue == oTarget[j].value) {
            oTarget[j].selected = true
            break;
          }
        };
        //if (oTarget.onchange) eval('oTarget.onchange(document.CMSUpdate.' + sField + ')');
        if (oTarget.onchange) eval('oTarget.onchange()');
      }
    }
  }
 }
}

function initValue_CMSEditableElement() {
  var objs = document.CMSUpdate.getElementsByTagName('input');
  for (var i=0; i<objs.length; i++) {
    if (objs[i].type == 'hidden') objs[i].value = '';
  }
  var objs = document.CMSUpdate.getElementsByTagName('select');
  for (var i=0; i<objs.length; i++) {
    if (objs[i].onchange) eval('objs[i].onchange()');
    //if (objs[i].onchange) alert(objs[i].onchange);
  }
}

function getParameter_ArrayJSON(oItems){
  var sReturn = '';

  if (!oItems) return sReturn;
  for (var i=0;i<oItems.length;i++) {
    sReturn = ((sReturn=='')?sReturn:sReturn+'&') + oItems[i].name + '=' + CMS_encodeURI(oItems[i].value);
  }
  return sReturn;
}

function getParameter_JSON(oItems) {
  var sReturn = '';

  if (!oItems) return sReturn;
  for (i in oItems) {
    sReturn = ((sReturn=='')?sReturn:sReturn+'&') + i + '=' + CMS_encodeURI(oItems[i]);
  }
  return sReturn;
}

function btnCMSListingUpdate_onClick(sMethod, idName, idValue, sFieldName, sValue){
  var oItems = [
    {name:'Method',value:sMethod},
    {name:sFieldName.replace(/[\[\]\{\}]/g, ''),value:sValue},
    {name:'AjaxPost',value:1},
    {name:idName,value:idValue}
  ];

  oDivWriteResponse  = document.getElementById(CMSDivHeader);
  //alert(sMethod + "\n" + idName + "\n" + idValue + "\n" + sFieldName + "\n" + sValue);
  makePOSTRequest(CMSScriptName, getParameter_ArrayJSON(oItems));
}

function smartTable_DeleteKey_onPress(iRowNum) {
  var sValue = {id:'', confirmValue:''};

  if (CMSSoftDelete) {
    var oTable = document.getElementById('CMSListContents');
    var oTr = oTable.getElementsByTagName('tr')[iRowNum];
    var oTds = oTr.getElementsByTagName('td');
    for (var i=0; i<oTds.length; i++) {
      var oSpan = oTds[i].getElementsByTagName('span');
      for (var j=0; j<oSpan.length; j++) {
        var sName = oSpan[j].getAttribute('name');
        if (sName == CMSSoftDeleteName) {
          sValue.id = oSpan[j].innerHTML;
        }
        if (sName == CMSDeleteConfirmField) {
          sValue.confirmValue = oSpan[j].innerHTML;
        }
      }
    }
    if (sValue != '') {
      if (CMSDeleteConfirm) {
        if (!confirm('Are you sure you want to delete this record (' + sValue.confirmValue + ')?')) return false;
      }
      btnCMSListingUpdate_onClick('SoftDelete', CMSSoftDeleteName, sValue.id, CMSSoftDelete, 1);
    }
  }
}

function getKeyValue_SpanCollection(oSpans) {
  var sReturn = null;
  for (var i=0; i<oSpans.length; i++) {
    if (oSpans[i].getAttribute('name') == CMSKeyName) sReturn = oSpans[i].innerHTML;
  }
  return sReturn;
}

function btnCMSUpDown_onClick(iRowNum, sType) {
  var tRows = element.tBodies[0].rows;
  var iMaxRow = tRows.length;
  if ((iRowNum == 1) && sType == 'up') return false;
  if ((iRowNum > iMaxRow - 1) && sType == 'down') return false;

  var oSpans = tRows[iRowNum - 1].getElementsByTagName('span');
  var fromID = getKeyValue_SpanCollection(oSpans);
  if (!fromID) return false;

  var oSpans = (sType=='up')?tRows[iRowNum - 2].getElementsByTagName('span'):tRows[iRowNum].getElementsByTagName('span');
  var toID = getKeyValue_SpanCollection(oSpans);
  if (!toID) return false;

  CMS_SwitchFieldValue('UpDown', fromID, toID, CMSUpDownFieldName);
}

function CMS_SwitchFieldValue(sMethod, fromID, toID, sFieldname){
  var oItems = [
    {name:'Method',value:sMethod},
    {name:'fromID',value:fromID},
    {name:'toID',value:toID},
    {name:'field',value:sFieldname},
    {name:'AjaxPost',value:1}
  ];

  oDivWriteResponse  = document.getElementById(CMSDivHeader);
  makePOSTRequest(CMSScriptName, getParameter_ArrayJSON(oItems));
}

function getPageDimensions() {
  var xScroll, yScroll;
  if (window.innerHeight && window.scrollMaxY) {
    xScroll = document.body.scrollWidth;
    yScroll = window.innerHeight + window.scrollMaxY;
  } else if (document.body.scrollHeight > document.body.offsetHeight){
    xScroll = document.body.scrollWidth;
    yScroll = document.body.scrollHeight;
  } else {
    xScroll = document.body.offsetWidth;
    yScroll = document.body.offsetHeight;
  }

  var windowWidth, windowHeight;
  if (self.innerHeight) {
    windowWidth = self.innerWidth;
    windowHeight = self.innerHeight;
  } else if (document.documentElement && document.body.clientHeight) {
    windowWidth = document.body.clientWidth;
    windowHeight = document.body.clientHeight;
  } else if (document.body) {
    windowWidth = document.body.clientWidth;
    windowHeight = document.body.clientHeight;
  }

  if(yScroll < windowHeight){
    this.height = windowHeight;
    this.centerHeight = windowHeight/2;
  } else {
    this.height = yScroll;
    this.centerHeight = yScroll/2;
  }

  if(xScroll < windowWidth){
    this.width = windowWidth;
    this.centerWidth = windowWidth/2;
  } else {
    this.width = xScroll;
    this.centerWidth = xScroll/2;
  }
}

function effect_slideIn() {
  if ((!this.style.opacity) || (!this.slideInFunction)) return false;

  var curOpacity = this.style.opacity * 100;
  if (curOpacity < 0)  {
    if (this.slideTimer) {
      this.status = null;
      clearInterval(this.slideTimer);
      this.slideOutTimer = null;
      remove_LoadingOverlay();
    }
  } else {
    if (this.slideTimer) {
      var nextOpacity = curOpacity - 1;
      this.style.filter  = 'alpha(opacity=' + nextOpacity + ')';
      this.style.opacity = (nextOpacity)/100;
      if (this.status != 'slideIn') {
        clearInterval(this.slideTimer);
        this.status = 'slideIn';
        this.slideTimer = setInterval(eval('this.slideInFunction'), 10);
      };
    } else {
      this.status = 'slideIn';
      this.slideTimer = setInterval(eval('this.slideInFunction'), 10);
    }
  }
}

function effect_slideOut() {
  if ((!this.style.opacity) || (!this.slideOutFunction)) return false;

  var curOpacity = this.style.opacity * 100;
  if (curOpacity > 100)  {
    if (this.slideTimer) {
      this.status = null;
      clearInterval(this.slideTimer);
      this.slideTimer = null;
    }
  } else {
    if (this.slideTimer) {
      var nextOpacity = curOpacity + 1;
      this.style.filter  = 'alpha(opacity=' + nextOpacity + ')';
      this.style.opacity = (nextOpacity)/100;
      if (this.status != 'slideOut') {
        clearInterval(this.slideTimer);
        this.status = 'slideOut';
        this.slideTimer = setInterval(eval('this.slideInFunction'), 10);
      };
    } else {
      this.status = 'slideOut';
      this.slideTimer = setInterval(eval('this.slideOutFunction'), 20);
    }
  }
}

function element_setStyle(oItems) {
  this.style.width = '100px';
  if (!oItems) return false;
  for (i in oItems) {
    if (typeof(oItems[i]) == 'string') {
      if (oItems[i].indexOf('"') > 0) {
        eval("this.style." + i + "='" + oItems[i] + "'");
      } else {
        eval('this.style.' + i + '="' + oItems[i] + '"');
      }
    } else {
      eval('this.style.' + i + '=' + oItems[i]);
    }
  }
}

function CMSObject_DivElement(name, id) {
  var obj = document.createElement('div');
  obj.setAttribute('id', id);
  obj.name = name;
  obj.setStyle = element_setStyle;
  obj.slideTimer = null;

  obj.InternalSlideOut = effect_slideOut;
  obj.slideOutFunction = name + '.InternalSlideOut()';
  obj.slideOut = function() {
    if (!this.slideTimer) {
      clearInterval(this.slideTimer);
      this.slideTimer = null;
    }
    this.InternalSlideOut();
  }
  obj.InternalSlideIn = effect_slideIn;
  obj.slideInFunction = name + '.InternalSlideIn()';
  obj.slideIn = function() {
    if (!this.slideTimer) {
      clearInterval(this.slideTimer);
      this.slideTimer = null;
    }
    this.InternalSlideIn();
  }

  eval('this.' + name + '=obj');
}

function CMSObject_iFrameAjaxOverlay(name, pageDimensions) {

  var obj = document.createElement('iframe');
  obj.setAttribute('id', 'frAjaxOverlay');
  obj.name = name;
  obj.setStyle = element_setStyle;
  obj.setStyle({
    position: 'absolute',
    top: '0px',
    left: '0px',
    filter: 'alpha(opacity=1)',
    opacity : 0.01,
    height: pageDimensions.height+'px',
    width: pageDimensions.width+'px'
  });
  eval('this.' + name + '=obj');
  //var body = document.getElementsByTagName('body')[0];
  //body.appendChild(obj);
}

function CMSObject_AjaxOverlay(name) {
  var pageDimensions = new getPageDimensions();

  var sHTML = '<img src="../img/common/ajax-loading.gif"/>'
            + '<span style="position: absolute;font-size: 12px;color: #444444;padding: 8px 10px;">'
            + 'Loading...</span>';

  this.name = name;
  this.logo    = (new CMSObject_DivElement('logo', 'CMS_loading_overlay')).logo;
  this.overlay = (new CMSObject_DivElement('overlay', 'CMS_loading_overlay')).overlay;
  this.ajaxFrame = (new CMSObject_iFrameAjaxOverlay('ajaxFrame', pageDimensions)).ajaxFrame;

  this.logo.innerHTML = sHTML;
  this.logo.slideInFunction  = name + '.' + this.logo.slideInFunction;
  this.logo.slideOutFunction  = name + '.' + this.logo.slideOutFunction;
  this.overlay.slideInFunction  = name + '.' + this.overlay.slideInFunction;
  this.overlay.slideOutFunction  = name + '.' + this.overlay.slideOutFunction;

  this.overlay.setStyle({
    position: 'absolute',
    top: '0px',
    filter: 'alpha(opacity=70)',
    opacity : 0.7,
    backgroundImage: 'url(../img/common/black-70.png)',
    backgroundRepeat: 'repeat',
    height: pageDimensions.height+'px',
    width: pageDimensions.width+'px'
  });

  this.logo.setStyle({
    filter: 'alpha(opacity=100)',
    opacity : 1,
    padding: '10px',
    backgroundColor: '#f0f0f0',
    position: 'absolute',
    top: (pageDimensions.centerHeight-15)+'px',
    left: (pageDimensions.centerWidth-70)+'px',
    height: '31px',
    width: '140px'
  });
}

function show_LoadingOverlay() {
  //addon_iframeLayer();
  CMSLoading = new CMSObject_AjaxOverlay('CMSLoading');
  var body = document.getElementsByTagName('body')[0];
  body.appendChild(CMSLoading.ajaxFrame);
  body.appendChild(CMSLoading.overlay);
  body.appendChild(CMSLoading.logo);
  //CMSLoading.logo.slideOut();
}

function clear_LoadingOverlay() {
  if (!CMSLoading) return false;
  //CMSLoading.logo.slideIn();
  remove_LoadingOverlay();
}

function remove_LoadingOverlay() {
  if (!CMSLoading) return false;
  var body = document.getElementsByTagName('body')[0];
  body.removeChild(CMSLoading.logo);
  body.removeChild(CMSLoading.overlay);
  body.removeChild(CMSLoading.ajaxFrame);
  CMSLoading = null;
}

function CMS_loadPage(iPage) {
  var btnSubmit = (document.CMSUpdate)?document.CMSUpdate.Method:null;
  var btnReset = (document.CMSUpdate)?document.CMSUpdate.CMSReset:null;
  if (document.CMSUpdate) {
    document.CMSUpdate.reset();
    initValue_CMSEditableElement();
    if (btnSubmit) btnSubmit.value = 'Add New';
    if (btnReset) btnReset.onclick = function () {return true};
  }
  var oItems = {Method: 'PageClick', page: iPage, AjaxPost: 1};
  oDivWriteResponse  = document.getElementById('MainList');
  makePOSTRequest(g_ScriptName, getParameter_JSON(oItems));
}

function CMS_removeAllOptions(oSelect) {
  for (var i=oSelect.options.length-1;i>=0;i--) oSelect.remove(i);
}

function CMS_addOptions(oSelect, objItems) {
  var index = oSelect.options.length;
  var obj = document.createElement('option');
  obj.value = objItems.value;
  obj.text  = objItems.text;
  oSelect.options.add(obj, index);
}

function CMS_displayPageItem(iTarget) {
  var oCur   = document.getElementById('CMSCurrentPage');
  var oTotal = document.getElementById('CMSTotalPages');
  var oRange = document.getElementById('CMSPageRange');
  var oTarget = document.getElementById('CMSPageItemArea');

  if ((!oCur) || (!oRange) || (!oTotal) || (!oTarget)) return false;
  var sWrite = '';  var sNext  = '';  var sPrev  = '';
  var sTagA  = '<a href="#" onclick="[COMMAND]">[A_CONTENT]</a>';
  var iCur   = oCur.innerHTML;
  var iTotal = oTotal.innerHTML;
  var iRange = oRange.value;

  var iEndPage = ((iTarget*iRange)>parseInt(iTotal))?parseInt(iTotal):(iTarget*iRange);
  for (var i=(((iTarget - 1)*iRange)+1); i <= iEndPage; i++) {
    sWrite = sWrite + ((i==iCur)?'<u>'+i+'</u>':sTagA.replace(/\[A_CONTENT\]/g, i)) + ' ';
    sWrite = sWrite.replace(/\[COMMAND\]/g, 'CMS_loadPage(' + i + ');');
  }

  var totGroup = (iTotal/iRange == parseInt(iTotal/iRange))?parseInt(iTotal/iRange):parseInt(iTotal/iRange)+1;
  if (iTarget != totGroup) {
    sWrite = sWrite + "..."
    var sCommand = "CMS_displayPageItem(" + (iTarget + 1) + ");";
    sNext = "&nbsp;&nbsp;" + sTagA.replace(/\[A_CONTENT\]/g, "<img src='../img/common/next.gif' border='0'/>");
    sNext = sNext.replace(/\[COMMAND\]/g, sCommand);
  }
  if (iTarget > 1) {
    var sCommand = "CMS_displayPageItem(" + (iTarget - 1) + ");";
    sPrev = sTagA.replace(/\[A_CONTENT\]/g, "<img src='../img/common/prev.gif' border='0'/>") + "&nbsp;&nbsp;";
    sPrev = sPrev.replace(/\[COMMAND\]/g, sCommand);
  }
  oTarget.innerHTML = sPrev + sWrite + sNext;
}

function appendCoding(oFunction, newCode) {
  var sFunction = oFunction.toString();
  sFunction = sFunction.replace(/\n/g, '');
  if (sFunction.indexOf('function') < 0) return false;
  if (!newCode) return false;
  if (newCode.substring(newCode.length-1) != ';') newCode = newCode + ';';

  var sTemp = (sFunction.match(/\{([\S ]+)/g)).toString();
  var oFunc = {
    parameter: sFunction.match(/\(([0-9a-zA-Z\,^\)]+)\)/i),
    code: sTemp.substring(1, sTemp.length-1)
  }
  oFunc.parameter = (oFunc.parameter)?oFunc.parameter[0].toString():'()';
  var sNewFunc = 'function ' + oFunc.parameter + '{' + newCode + oFunc.code + '}';
  return sNewFunc;
}
