var g_vecPreloadHistory = [];

function strcat()
{
  var l_vecBuff = [];
  var l_nIdx    = 0;
  var l_nLen    = arguments.length;

  for(l_nIdx = 0; l_nIdx < l_nLen; ++l_nIdx)
    l_vecBuff.push(arguments[l_nIdx]);
  return l_vecBuff.join("");
}

function separateURL(p_strURL)
{
  var l_nStart = 0;
  var l_nStop  = 0;
  var l_objRet = new Object();

  l_objRet.domain = "";
  l_objRet.path   = "";
  if((l_nStart = p_strURL.indexOf("://")) == -1)
    l_nStart = 0;
  else
    l_nStart += 3;
  if((l_nStop = p_strURL.indexOf("/", l_nStart)) == -1)
    l_nStop = p_strURL.length;
  l_objRet.domain = p_strURL.substring(l_nStart, l_nStop);
  if(l_nStop == p_strURL.length || (++l_nStop) >= p_strURL.length)
    return l_objRet;
  l_nStart = l_nStop;
  l_nStop  = p_strURL.length;
  l_objRet.path = p_strURL.substring(l_nStart, l_nStop);
  return l_objRet;
}

function getHexChar(p_nSrc)
{
  var l_vecDigits = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'];
  var l_vecChars  = [];

  l_vecChars.push("%");
  l_vecChars.push(l_vecDigits[p_nSrc >> 4]);
  l_vecChars.push(l_vecDigits[p_nSrc & 15]);
  return l_vecChars.join('');
}

function getNumber(p_strValue, p_nBase)
{
  var l_vecDigits = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'];
  var l_vecBuff   = [];
  var l_strDigits = null;
  var l_strValue  = ((p_strValue) ? p_strValue.toUpperCase() : "");
  var l_bDec      = ((!p_nBase || p_nBase < 1 || l_strValue.indexOf(".") > -1) ? true : false);
  var l_nLen      = ((!p_nBase || p_nBase < 1) ? 10 : p_nBase);
  var l_nIdx      = 0;
  var l_nStart    = 0;
  var l_cChar     = ' ';
  
  if(!l_bDec && l_strValue.length > 1 && l_strValue.substring(0, 2) == "0X" && l_strValue.indexOf(".") == -1)
	l_nLen = ((l_nStart = 2) + 14);
  for(l_nIdx = 0; l_nIdx < l_nLen; ++l_nIdx)
    l_vecBuff.push(l_vecDigits[l_nIdx]);
  l_vecBuff.push('.');
  l_vecBuff.push('-');
  l_vecBuff.push('+');
  l_strDigits = l_vecBuff.join("");
  l_vecBuff = [];
  l_nLen = l_strValue.length;
  for(l_nIdx = l_nStart; l_nIdx < l_nLen; ++l_nIdx)
	if((l_nStart = l_strDigits.indexOf(l_cChar = l_strValue.charAt(l_nIdx))) > -1)
	  l_vecBuff.push(l_cChar);
  l_strValue = l_vecBuff.join("");  
  return ((l_bDec) ? parseFloat(l_strValue) : parseInt(l_strValue, p_nBase));
}

function urlenc(p_strValue)
{
  var l_reConvert = /^([a-zA-Z0-9\-\_\.])$/;
  var l_vecChars  = [];

  for(l_nIdx = 0; l_nIdx < p_strValue.length; l_nIdx++)
  {
    l_cCur = p_strValue.charAt(l_nIdx);
    if(l_cCur == ' ')
      l_vecChars.push('+');
    else if(l_reConvert.test(l_cCur))
      l_vecChars.push(l_cCur);
    else
      l_vecChars.push(getHexChar(p_strValue.charCodeAt(l_nIdx)));
  }
  return l_vecChars.join('');
}

function urldec(p_strValue)
{
  return unescape(p_strValue.replace(/\+/g, " "));	
}

function makeFormURL(p_objSubmit)
{
  var l_objForm  = (p_objSubmit ? p_objSubmit.form   : null);
  var l_objElems = (l_objForm   ? l_objForm.elements : null);
  var l_objElem  = null;
  var l_objOpts  = null;
  var l_vecBuff  = [];
  var l_nItems   = 0;
  var l_nIdx1    = 0;
  var l_nIdx2    = 0;
  
  if(l_objForm)
    l_vecBuff.push(l_objForm.action);
  if(l_objElems)
  {
    for(l_nIdx1 = 0; l_nIdx1 < l_objElems.length; ++l_nIdx1)
    {
      l_objElem = l_objElems[l_nIdx1];
      if(!l_objElem.name)
        continue;
      switch(l_objElem.type)
      {
        case "image"  :
          continue;
        case "radio"    :
        case "checkbox" :
          if(l_objElem.checked)
          {
            l_vecBuff.push((l_nItems++ == 0) ? "?" : "&");
            l_vecBuff.push(urlenc(l_objElem.name));
            l_vecBuff.push("=");
            l_vecBuff.push(urlenc(l_objElem.value));
          }
          break;
        case "submit" :
          if(p_objSubmit == l_objElem)
          {
            l_vecBuff.push((l_nItems++ == 0) ? "?" : "&");
            l_vecBuff.push(urlenc(l_objElem.name));
            l_vecBuff.push("=");
            l_vecBuff.push(urlenc((l_objElem.type == "image") ? "true" : l_objElem.value));
          }
          break;
        case "select-one"      :
        case "select-multiple" :
          l_objOpts = l_objElem.options;
          for(l_nIdx2 = 0; l_nIdx2 < l_objOpts.length; ++l_nIdx2)
          {
            if(!l_objOpts[l_nIdx2].selected)
              continue;
            l_vecBuff.push((l_nItems++ == 0) ? "?" : "&");
            l_vecBuff.push(urlenc(l_objElem.name));
            l_vecBuff.push("=");
            l_vecBuff.push(urlenc(l_objOpts[l_nIdx2].value));
          }
          break;
        default:
          l_vecBuff.push((l_nItems++ == 0) ? "?" : "&");
          l_vecBuff.push(urlenc(l_objElem.name));
          l_vecBuff.push("=");
          l_vecBuff.push(urlenc(l_objElem.value));
      }
    }
    if(p_objSubmit.name && p_objSubmit.type == "image")
    {
      l_vecBuff.push((l_nItems++ == 0) ? "?" : "&");
      l_vecBuff.push(urlenc(p_objSubmit.name));
      l_vecBuff.push("=");
      l_vecBuff.push("true");
    }
  }
  return l_vecBuff.join(""); 
}

function makeURL(p_strPage, p_vecArgs)
{
  var l_vecBuff = [];
  var l_strRet  = p_strPage;

  if(!p_vecArgs || p_vecArgs.length < 1)
    return l_strRet;
  for(var l_strKey in p_vecArgs)
    l_vecBuff.push(strcat(urlenc(l_strKey), "=", urlenc(p_vecArgs[l_strKey])));
  l_strRet = strcat(p_strPage, "?", l_vecBuff.join("&"))
  return l_strRet;
}

function loadURL(p_strPage, p_bNewWin, p_vecArgs)
{
  var l_strPage = makeURL(p_strPage, p_vecArgs);

  if(p_bNewWin)
  {
    var l_objNewWin = window.open(l_strPage);

    if(l_objNewWin && l_objNewWin.focus)
      l_objNewWin.focus();
  }
  else
    self.location = l_strPage;
  return false;
}

function loadPopUpURL(p_strPage, p_nWidth, p_nHeight, p_vecArgs)
{
  var l_strPage   = makeURL(p_strPage, p_vecArgs);
  var l_objNewWin = window.open(l_strPage, "PopUpWindow", "width=" + p_nWidth + ",height=" + p_nHeight + ",resizeable=yes,scrollbars=no,location=no,directories=no,toolbar=no,status=no,menubar=no");
 
  if(l_objNewWin && l_objNewWin.focus)
    l_objNewWin.focus();
  return;
}

function basename(p_strPath)
{
  var l_nLen = ((p_strPath) ? p_strPath.length : 0);
  var l_nIdx = l_nLen;
  
  while(--l_nIdx > -1 && p_strPath.charAt(l_nIdx) != '/' && p_strPath.charAt(l_nIdx) != '\\');
  if(l_nIdx < 0)
    return p_strPath;
  if(++l_nIdx >= l_nLen)
    return "";
  return p_strPath.substring(l_nIdx);
}

function dirname(p_strPath)
{
  var l_nLen = ((p_strPath) ? p_strPath.length : 0);
  var l_nIdx = l_nLen;

  while(--l_nIdx > -1 && p_strPath.charAt(l_nIdx) != '/' && p_strPath.charAt(l_nIdx) != '\\');
  if(l_nIdx < 0)
    return "";
  return p_strPath.substring(0, l_nIdx);
}

function file_ext(p_strPath)
{
  var l_nLen = ((p_strPath) ? p_strPath.length : 0);
  var l_nIdx = l_nLen;

  while(--l_nIdx > -1 && p_strPath.charAt(l_nIdx) != '.');
  if(l_nIdx < 0)
    return "";
  if(++l_nIdx >= l_nLen)
    return "";
  return p_strPath.substring(l_nIdx);
}

function submitForm(p_strFormID)
{
  l_objForm = document.getElementById(p_strFormID);

  if(l_objForm && l_objForm.submit)
    l_objForm.submit();
  return false;
}

function focus_field(p_strName)
{
  l_objField = document.getElementById(p_strName);

  if(l_objField)
  {
    if(l_objField.focus)
      l_objField.focus();
    if(l_objField.type && (l_objField.type.toLowerCase() == "text" || l_objField.type.toLowerCase() == "password"))
      l_objField.select();
  }
}

function preloadImg(p_strImgName)
{
  l_objImg = document.createElement("img");
  
  for(l_nIdx = 0; l_nIdx < g_vecPreloadHistory.length; l_nIdx++)
    if(g_vecPreloadHistory[l_nIdx] == p_strImgName)
      return;
  g_vecPreloadHistory.push(p_strImgName);
  l_objImg.src = p_strImgName;
  return;
}

function changeImg(p_objThis, p_strImgName)
{
  if(p_objThis.src)
    p_objThis.src = p_strImgName;
}

function do_ErrPopup(p_strCap, p_strMsg, p_funcRet, p_strStyle, p_nX, p_nY)
{
  var l_strMsg = strcat("<table cellpadding=0 cellspacing=0 border=0><tr><td class=bigErr style='padding: 5px'>", p_strMsg, "</td></tr></table>");

  show_popup("PopUp", p_strCap, l_strMsg, 250, 100, p_nX, p_nY, p_funcRet, p_strStyle);
  return false;
} 

function do_ErrDiv(p_strMsg, p_strDivID)
{
  alert(p_strMsg);
  return false;
}

function img_change(p_imgThis, p_strNewImg)
{
  p_imgThis.src = p_strNewImg;
} 

function addEvent(obj, evType, fn)
{
  if(obj.addEventListener)
  {
    obj.addEventListener(evType, fn, false);
    return true;
  }
  else if (obj.attachEvent)
  {
    var r = obj.attachEvent("on"+evType, fn);
    return r;
  }
  else
    return false;
}

function removeEvent(obj, evType, fn, useCapture)
{
  if(obj.removeEventListener)
  {
    obj.removeEventListener(evType, fn, useCapture);
    return true;
  }
  else if (obj.detachEvent)
  {
    var r = obj.detachEvent("on"+evType, fn);
    return r;
  }
  else
    alert("Handler could not be removed");
}

function QUARTERHISTORY(p_nYear, p_nQuarter)
{
  this.m_vecQuarters = [];
  this.m_vecQuarters.push([]);
  this.m_vecQuarters[this.m_vecQuarters.length-1]["year"]    = p_nYear;
  this.m_vecQuarters[this.m_vecQuarters.length-1]["quarter"] = p_nQuarter;

  this.atFront = function()
  {
    return (this.m_vecQuarters.length == 1);
  }     

  this.startAsInt = function()
  {
    var l_vecQuarter = this.m_vecQuarters[0];

    return ((l_vecQuarter["year"] * 10) + l_vecQuarter["quarter"]);
  }

  this.asInt = function()
  {
    var l_vecQuarter = this.m_vecQuarters[this.m_vecQuarters.length-1];

    return ((l_vecQuarter["year"] * 10) + l_vecQuarter["quarter"]);
  }

  this.asString = function()
  {
    var l_vecQuarter = this.m_vecQuarters[this.m_vecQuarters.length-1];

    return (l_vecQuarter["year"] + " Q" + l_vecQuarter["quarter"]);
  }

  this.back = function()
  {
    if(this.m_vecQuarters.length > 1)
      this.m_vecQuarters.length--;
  }

  this.incQuarter = function()
  {
    var l_vecQuarter = [];

    l_vecQuarter["year"]    = this.m_vecQuarters[this.m_vecQuarters.length-1]["year"];
    l_vecQuarter["quarter"] = this.m_vecQuarters[this.m_vecQuarters.length-1]["quarter"];
    l_vecQuarter["quarter"]++;
    if(l_vecQuarter["quarter"] > 4)
    {
      l_vecQuarter["year"]++;
      l_vecQuarter["quarter"] = 1;
    } 
    this.m_vecQuarters.push(l_vecQuarter);
  }

  this.decQuarter = function()
  {
    var l_vecQuarter = [];

    l_vecQuarter["year"]    = this.m_vecQuarters[this.m_vecQuarters.length-1]["year"];
    l_vecQuarter["quarter"] = this.m_vecQuarters[this.m_vecQuarters.length-1]["quarter"];
    l_vecQuarter["quarter"]--;
    if(l_vecQuarter["quarter"] < 1)
    {
      l_vecQuarter["year"]--;
      l_vecQuarter["quarter"] = 4;
    } 
    this.m_vecQuarters.push(l_vecQuarter);
  }
}

// CLASS STRING_Parser
// - CLASS AJAX_Records helper class
// - Parses records from buffer

function STRING_Parser(p_strBuffer)
{
  this.m_strBuffer = p_strBuffer;
  this.m_nCursor   = 0;

  if(p_strBuffer.length<1)
    this.m_nCursor = -1;      

  this.EOL = function()
  {
    return (this.m_nCursor==-1 || this.m_nCursor>=this.m_strBuffer.length)
  }

  this.parseLine = function(p_strDelimiter)
  {
    l_vecRec   = []
    l_vecCur   = [];
    l_chCurQt  = '';
    
    for(l_nIdx=this.m_nCursor; l_nIdx<this.m_strBuffer.length; l_nIdx++)
    {
      l_chCur = this.m_strBuffer.charAt(l_nIdx);
      if(l_chCurQt=='')
      { 
        if(l_chCur==p_strDelimiter || l_chCur=='\n')
        {
          if(l_chCur=='\n' && l_vecCur.length>0 && l_vecCur[l_vecCur.length-1]=='\r')
            l_vecCur.length--;
          l_vecRec.push(l_vecCur.join(""));
          l_vecCur = [];
          if(l_chCur=='\n')
          {
            this.m_nCursor = l_nIdx+1;
            return l_vecRec;
          }
          continue;
        }
      }
      switch(l_chCur)
      {
        case '\"':
        case '\'': if(l_chCurQt=='')
                     l_chCurQt = l_chCur;
                   else if(l_chCurQt==l_chCur)
                     l_chCurQt = '';
                   else
                     l_vecCur.push(l_chCur);
                   continue;
        case '\\': if((l_nIdx+1)<this.m_strBuffer.length)
                   {
                     l_nIdx++;
                     l_chCur = this.m_strBuffer.charAt(l_nIdx);
                     switch(l_chCur)
                     {
                       case 'r': l_vecCur.push('\r');
                                 break;
                       case 'n': l_vecCur.push('\n');
                                 break;
                       case 'f': l_vecCur.push('\f');
                                 break;
                       case 't': l_vecCur.push('\t');
                                 break;                     
                       case 'v': l_vecCur.push('\v');
                                 break;
                       case '0': l_vecCur.push('\0');
                                 break;
                       default:  l_vecCur.push(l_chCur);
                     }
                   }
                   continue;
        default:   l_vecCur.push(l_chCur);
      }
    }
    this.m_nCursor = l_nIdx;
    return l_vecRec;
  }
}

// CLASS AJAX_Records
// - Gets Records From Server in Delimited format
//   + First row is layout record
//   + Additional rows are loaded as data
// - Methods
//   + setDelimiter(stringDelimiter)
//     - Sets data delimiter
//   + loaded()
//     - Returns RS State
//   + error()
//     - Returns true if an error occured
//   + errMsg()
//     - Returns error message if an error occured
//   + setIndex(stringColumnName)
//     - Sets the column to use in index lookups   
//   + toIdx(stringValue)
//     - Move cursor to value
//   + atEnd()
//     - Returns true if cursor is at the end of the RS
//   + toFirst()
//     - Places RS cursor on first record
//   + toLast()
//     - Places RS cursor on last record
//   + toNext()
//     - Moves RS cursor to next record
//   + toPrevious()
//     - Moves RS cursor to previous record
//   + getCurrent()
//     - Returns vector of the current row
//   + getCurrentMap()
//     - Returns name associative map of [column, value] pairs
//   + getVecSchema()
//     - Returns Schema as vector
//   + getMapSchema()
//     - Returns name associative map of [column, idx] pairs
//   + getCount()
//     - Returns RS number of records
//   + requestData(stringURL, mapGetArgs, functionCallback, mapCallbackArgs)
//     - Initiate data request
//     - When data is retrieved, callback function is called with Args Map
 
function AJAX_Records(p_strDelimiter)
{
  this.m_mapIdx       = [];
  this.m_strDelimiter = p_strDelimiter;
  this.m_strRequest   = "";
  this.m_bDataFetched = false;
  this.m_strError     = "";
  this.m_unlHttp      = null;
  this.m_vecSchema    = [];
  this.m_vecData      = [];
  this.m_unlHttp      = null;
  this.m_funReturn    = null;
  this.m_mapReturn    = [];
  this.m_nCursor      = -1;
  this.m_nRequests    = 0;

  this.setDelimiter = function(p_strDelimiter)
  {
    this.m_strDelimiter = p_strDelimiter;     
  }
    
  this.loaded = function()
  {
    return this.m_bDataFetched;
  }

  this.error = function()
  {
    return (this.m_strError!="");
  }

  this.errMsg = function()
  {
    return this.m_strError;
  }

  this.atEnd = function()
  {
    return (this.m_nCursor==-1);
  }

  this.setIndex = function(p_strColName)
  {
    l_nIdx1 = 0;
    l_nIdx2 = 0;

    this.m_mapIdx = [];
    for(l_nIdx1=0; l_nIdx1<this.m_vecSchema.length; l_nIdx1++)
      if(this.m_vecSchema[l_nIdx1]==p_strColName)
        break;
    if(l_nIdx1>=this.m_vecSchema.length)
      return false;
    for(l_nIdx2=0; l_nIdx2<this.m_vecData.length; l_nIdx2++)
      this.m_mapIdx[this.m_vecData[l_nIdx2][l_nIdx1]] = l_nIdx2;
    return true;
  }

  this.toIdx = function(p_strVal)
  {
    if(typeof(this.m_mapIdx[p_strVal])=='undefined')
      return false;
    this.m_nCursor = this.m_mapIdx[p_strVal];
    return true;     
  }

  this.toFirst = function()
  {
    if(this.m_vecData.length<1)
      this.m_nCursor = -1;
    else
      this.m_nCursor = 0;
  }

  this.toLast = function()
  {
    if(this.m_vecData.length<1)
      this.m_nCursor = -1;
    else
      this.m_nCursor = this.m_vecData.length-1;
  }

  this.toNext = function()
  {
    this.m_nCursor++;
    if(this.m_nCursor>=this.m_vecData.length)
    {
      this.m_nCursor = -1;
      return false;
    }
    return true;
  }
  
  this.toPrevious = function()
  {
    this.m_nCursor--;
    if(this.m_nCursor<0)
    {
      this.m_nCursor = -1;
      return false;
    }
    return true;
  }

  this.getCurrent = function()
  {
    if(this.m_nCursor==-1)
      return [];
    return this.m_vecData[this.m_nCursor];
  }

  this.getCurrentMap = function()
  {
    l_mapReturn = [];
    if(this.m_nCursor==-1)
      return l_mapReturn;
    for(l_nIdx=0; l_nIdx<this.m_vecSchema.length; l_nIdx++)
      l_mapReturn[this.m_vecSchema[l_nIdx]] = this.m_vecData[this.m_nCursor][l_nIdx];
    return l_mapReturn;
  }

  this.getVecSchema = function()
  {
    return this.m_vecSchema;
  }

  this.getMapSchema = function()
  {
    l_mapSchema = [];
    for(l_nIdx=0; l_nIdx<this.m_vecSchema.length; l_nIdx++)
      l_mapSchema[this.m_vecSchema[l_nIdx]] = l_nIdx;
    return l_mapSchema;
  }

  this.getCount = function()
  {
    return this.m_vecData.length;
  }

  this.requestData = function(p_strPage, p_mapVars, p_funReturn, p_mapReturn)
  {
    var l_objThis = this;
    l_vecArgs = [];

    for(var l_strItm in p_mapVars)
    {
      l_vecArgs.push(urlenc(l_strItm) + "=" + urlenc(p_mapVars[l_strItm]));
    }
    this.m_strRequest = p_strPage;
    if(l_vecArgs.length > 0)
      this.m_strRequest += "?" + l_vecArgs.join("&");
    this.m_nRequests++;
    this.m_funReturn        = p_funReturn;
    this.m_mapReturn        = p_mapReturn;
    this.m_bDataFetched     = false;
    this.m_vecSchema.length = 0;
    this.m_vecData.length   = 0;
    this.m_nCursor          = -1;
    if(this.m_unlHttp != null)
      delete(this.m_unlHttp);
    this.m_unlHttp = null;
    if(window.XMLHttpRequest)
    {
      this.m_unlHttp = new XMLHttpRequest();
    }
    else if(window.ActiveXObject)
    {
      this.m_unlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    else
    {
      alert("Your browser does not support HTTP Request");
      return;      
    }
    this.m_unlHttp.onreadystatechange = function()
    { l_objThis.stateChanged(); };
    this.m_unlHttp.open("GET", this.m_strRequest, true);
    this.m_unlHttp.send(null);
    return;
  }

  this.parseBuffer = function(p_strBuffer)
  {
    var l_strpSplitter = new STRING_Parser(p_strBuffer);

    this.m_vecSchema = l_strpSplitter.parseLine(this.m_strDelimiter);
    if(this.m_vecSchema.length>0)
    {
      while(!l_strpSplitter.EOL())
      {
        l_vecCurRow = l_strpSplitter.parseLine(this.m_strDelimiter);
        if(l_vecCurRow.length<1)
          continue;
        if(l_vecCurRow.length!=this.m_vecSchema.length)
        {
          this.m_strError = "Schema column count of " + this.m_vecSchema.length + " did not match data row #" + this.m_vecData.length + " with count of " + l_vecCurRow.length + ".";
          this.m_vecSchema.length = 0;
          this.m_vecData.length = 0;
          this.m_bDataFetched = false;
          return false;
        }
        this.m_vecData.push(l_vecCurRow);
      }
    }
    this.m_bDataFetched = true;
    this.m_nCursor = -1;
    return true;
  }

  this.stateChanged = function()  
  { 
    if(this.m_unlHttp.readyState==4 || this.m_unlHttp.readyState=="complete")
    {
      if(this.m_unlHttp.status!=200)
        this.m_strError = "ERROR: " + this.m_unlHttp.responseText;
      else
      {
        l_strContentType = this.m_unlHttp.getResponseHeader("Content-Type").toLowerCase();
        l_bGoodSrc = false;
        if(l_strContentType=="text/psv" && this.m_strDelimiter=="|")
          l_bGoodSrc = true;
        else if(l_strContentType=="text/csv" && (this.m_strDelimiter=="," || this.m_strDelimiter=="\t"))
          l_bGoodSrc = true;
        if(l_bGoodSrc)
          this.parseBuffer(this.m_unlHttp.responseText);
        else
          this.m_strError = "<b>ERROR: Invalid Data Source</b><br>" + this.m_unlHttp.responseText;
      }
      if(this.m_funReturn!=null)
        this.m_funReturn(this.m_mapReturn);
    }
  } 
}

// CLASS AJAX_Request
// - Does GET or POST with Variables from JavaScript
// - Methods
//   + setType(stringPageType)
//     - Sets page request type [GET | POST]
//   + loaded()
//     - Returns Buffer State
//   + error()
//     - Returns true if an error occured
//   + errMsg()
//     - Returns error message if an error occured
//   + page()
//     - Returns string containing returned content
//   + requestPage(stringURL, mapGetArgs, functionCallback, mapCallbackArgs)
//     - Initiate data request
//     - When data is retrieved, callback function is called with Args Map

function AJAX_Request(p_strType)
{
  this.m_strType      = p_strType;
  this.m_strResponse  = "";
  this.m_strError     = "";
  this.m_unlHttp      = null;
  this.m_funReturn    = null;
  this.m_mapReturn    = [];     
  this.m_bPageFetched = false;

  this.setType = function(p_strType)
  {
    this.m_strType = p_strType;     
  }

  this.loaded = function()
  {
    return this.m_bDataFetched;
  }
  
  this.error = function()
  {
    return (this.m_strError!="");
  }
  
  this.errMsg = function()
  {
    return this.m_strError;
  }
  
  this.page = function()
  {
    return this.m_strResponse;  
  }
     
  this.requestPage = function(p_strPage, p_mapVars, p_funReturn, p_mapReturn)
  {
    var l_objThis = this;
    l_strPage     = p_strPage;
    l_strArgs     = "";
    l_vecArgs     = [];

    for(var l_strItm in p_mapVars)
      l_vecArgs.push(urlenc(l_strItm) + "=" + urlenc(p_mapVars[l_strItm]));
    this.m_nRequests++;
    this.m_funReturn        = p_funReturn;
    this.m_mapReturn        = p_mapReturn;
    this.m_bDataFetched     = false;
    this.m_strResponse      = "";
    this.m_strError         = "";
    if(this.m_unlHttp != null)
      delete(this.m_unlHttp);
    this.m_unlHttp = null;
    if(window.XMLHttpRequest)
      this.m_unlHttp = new XMLHttpRequest();
    else if(window.ActiveXObject)
      this.m_unlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    else
    {
      alert("Your browser does not support HTTP Request");
      return;      
    }
    this.m_unlHttp.onreadystatechange = function() { l_objThis.stateChanged(); };
    if(l_vecArgs.length < 1 || this.m_strType.toUpperCase() == "GET")
    {
      if (l_vecArgs.length > 0)
        l_strPage += "?" + l_vecArgs.join('&');
      this.m_unlHttp.open("GET", l_strPage, true);
      this.m_unlHttp.send(null);
      return;
    }
    l_strArgs = l_vecArgs.join('&');
    this.m_unlHttp.open("POST", l_strPage, true);
    this.m_unlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    this.m_unlHttp.setRequestHeader("Content-Length", l_strArgs.length);     
    this.m_unlHttp.send(l_strArgs);
    return;     
  }

  this.stateChanged = function()  
  { 
    if(this.m_unlHttp.readyState==4 || this.m_unlHttp.readyState=="complete")
    {
      if(this.m_unlHttp.status!=200)
        this.m_strError = "ERROR: " + this.m_unlHttp.responseText;
      else
      {
        this.m_strResponse  = this.m_unlHttp.responseText;
        this.m_bPageFetched = true;
      }
      if(this.m_funReturn != null)
        this.m_funReturn(this.m_mapReturn);
    }
  } 
}

function Browser()
{
  var l_strUserAgent;
  var l_strMatch;
  var l_nIdx;
  var l_vecBrowser = null;
  this.m_bIsIE    = false;
  this.m_bIsNS    = false;
  this.m_bIsWin   = (window.navigator.userAgent.toLowerCase().indexOf("windows") != -1);
  this.m_strName  = "";
  this.m_fVersion = null;

  if(!(l_vecBrowser = /.*(MSIE|Firefox|Opera|Netscape|Netscape6|Chrome)[  /]([\d]+(?:[.][\d]+)?).*/.exec(window.navigator.userAgent)))
    if(!(l_vecBrowser = /.*(Safari)[  /]([\d]+(?:[.][\d]+)?).*/.exec(window.navigator.userAgent)))
      l_vecBrowser = /.*(Mozilla)[  /]([\d]+(?:[.][\d]+)?).*/.exec(window.navigator.userAgent);
  if(l_vecBrowser && l_vecBrowser.length > 2)
  { 
    this.m_strName  = l_vecBrowser[1];
    this.m_fVersion = parseFloat(l_vecBrowser[2]);
    this.m_bIsIE    = (this.m_strName == "MSIE");
    this.m_bIsNS    = (!this.m_bIsIE);
  }

  this.isIE      = function() { return this.m_bIsIE;    }
  this.isNS      = function() { return this.m_bIsNS;    }
  this.isWindows = function() { return this.m_bIsWin;   }
  this.typename  = function() { return this.m_strName;  }
  this.version   = function() { return this.m_fVersion; }

  this.private_filterWinVal = function (p_nWinDim, p_nDocDim, p_nBodDim)
  {
    var l_nWinDim = ((p_nWinDim) ? (p_nWinDim) : (0));
    var l_nDocDim = ((p_nDocDim) ? (p_nDocDim) : (0));
    var l_nBodDim = ((p_nBodDim) ? (p_nBodDim) : (0));
    
    if(l_nDocDim && (!l_nWinDim || (l_nWinDim > l_nDocDim)))
      l_nWinDim = l_nDocDim;
    return ((l_nBodDim && (!l_nWinDim || (l_nWinDim > l_nBodDim))) ? l_nBodDim : l_nWinDim);
  }

  this.winWidth = function()
  {
    var l_nWinX = ((window.innerWidth)        ? (window.innerWidth)                     : (0));
    var l_nDocX = ((document.documentElement) ? (document.documentElement.clientWidth)  : (0));
    var l_nBodX = ((document.body)            ? (document.body.clientWidth)             : (0));
  
    return this.private_filterWinVal(l_nWinX, l_nDocX, l_nBodX);
  }

  this.winHeight = function()
  {
    var l_nWinY = ((window.innerHeight)       ? (window.innerHeight)                    : (0));
    var l_nDocY = ((document.documentElement) ? (document.documentElement.clientHeight) : (0));
    var l_nBodY = ((document.body)            ? (document.body.clientHeight)            : (0));
  
    return this.private_filterWinVal(l_nWinY, l_nDocY, l_nBodY);
  }
  
  this.winScrollX = function()
  {
    var l_nWinX = ((window.pageXOffset)       ? (window.pageXOffset)                  : (0));
    var l_nDocX = ((document.documentElement) ? (document.documentElement.scrollLeft) : (0));
    var l_nBodX = ((document.body)            ? (document.body.scrollLeft)            : (0));

    return this.private_filterWinVal(l_nWinX, l_nDocX, l_nBodX);
  }

  this.winScrollY = function()
  {
    var l_nWinY = ((window.pageYOffset)       ? (window.pageYOffset)                 : (0));
    var l_nDocY = ((document.documentElement) ? (document.documentElement.scrollTop) : (0));
    var l_nBodY = ((document.body)            ? (document.body.scrollTop)            : (0));

    return this.private_filterWinVal(l_nWinY, l_nDocY, l_nBodY);
  }

  this.center  = function(p_nWidth, p_nHeight)
  {  
    var l_objLoc     = new Object();
    var l_nWidth     = ((p_nWidth)  ? p_nWidth  : 0);
    var l_nHeight    = ((p_nHeight) ? p_nHeight : 0);
    var l_nScrWidth  = 0;
    var l_nScrHeight = 0;
    var l_nScrMidX   = 0;
    var l_nScrMidY   = 0;
    
    l_objLoc.x   = 0;
    l_objLoc.y   = 0;
    l_nScrWidth  = this.winWidth();
    l_nScrHeight = this.winHeight();
    l_nScrMidX = ((l_nScrWidth  > 0) ? (l_nScrWidth/2)  : (l_nScrWidth) );    
    l_nScrMidY = ((l_nScrHeight > 0) ? (l_nScrHeight/2) : (l_nScrHeight));    
    l_objLoc.x = ((l_nWidth  > 0) ? (l_nScrMidX - (l_nWidth/2))  : (l_nScrMidX));
    l_objLoc.y = ((l_nHeight > 0) ? (l_nScrMidY - (l_nHeight/2)) : (l_nScrMidY));
    if(l_objLoc.x < 0)
      l_objLoc.x = 0;
    if(l_objLoc.y < 0)
      l_objLoc.y = 0;
    return l_objLoc;
  }
  
  this.getKeyCode = function(p_objEvent)
  {
    if(window.event)     // IE
      return p_objEvent.keyCode;
    if(p_objEvent.which) // Netscape/Firefox/Opera
      p_objEvent.which;
    return -1;
  }
  
  this.cancelEvent = function(p_objEvent)
  {
    if(this.isIE())
      p_objEvent.returnValue = false;
    return false;  
  }
}

function imgInfo(p_strImg, p_nWidth, p_nHeight, p_nPadT, p_nPadR, p_nPadB, p_nPadL)
{
  this.src     = p_strImg;
  this.width   = p_nWidth;
  this.height  = p_nHeight;
  this.padding = new Object();
  this.padding.top    = ((p_nPadT) ? p_nPadT : 0);
  this.padding.right  = ((p_nPadR) ? p_nPadR : 0);
  this.padding.bottom = ((p_nPadB) ? p_nPadB : 0);
  this.padding.left   = ((p_nPadL) ? p_nPadL : 0);
  this.total   = new Object();
  this.total.width  = this.width  + this.padding.left + this.padding.right;
  this.total.height = this.height + this.padding.top  + this.padding.bottom;

  this.spacerHTML = function() { return "<img src='images/spacer.gif' border='0'>"; }
  this.sizeCSS    = function()
  {
    return strcat("width: ", this.total.width, "px; height", this.total.height, "px;");
  }

  this.paddingCSS = function()
  {
    return strcat("padding: ", this.padding.top, "px ", this.padding.right, "px ", this.padding.bottom, "px ", this.padding.left, "px");
  }
  
  this.defaultRepeat = function()
  {
    if(this.width == 1)
      return "repeat-x";
    if(this.height == 1)
      return "repeat-y";
    return "no-repeat";
  } 
 
  this.backgroundCSS = function(p_strRepeat)
  {
    var l_vecStr    = [];
    var l_strRepeat = ((p_strRepeat) ? p_strRepeat : this.defaultRepeat());
    var l_bBoth     = (l_strRepeat == "no-repeat");
    
    if(l_strRepeat.toLowerCase() == "x")
      l_strRepeat = "repeat-x";
    else if(l_strRepeat.toLowerCase() == "y")
      l_strRepeat = "repeat-y";
    if(l_bBoth || l_strRepeat == "repeat-y")
    {
      l_vecStr.push("width: ");
      l_vecStr.push(this.total.width);
      l_vecStr.push("px;");
    }
    if(l_bBoth || l_strRepeat == "repeat-x")
    {
      if(l_vecStr.length > 0)
        l_vecStr.push(" ");
      l_vecStr.push("height: ");
      l_vecStr.push(this.total.height);
      l_vecStr.push("px;");
    }
    if(l_vecStr.length > 0)
      l_vecStr.push(" ");
    return strcat(l_vecStr.join(""), "background-image: url(", this.src, "); background-repeat: ", l_strRepeat, ";");
  }
}

function popupTheme()
{
  this.browser = new Browser();
  this.themes  = null;
  this.current = null;
  this.nameDefault = ((!this.browser.isWindows() || this.browser.typename() == "Safari") ? "OSX" : "Vista");
 
  this.init = function()
  {
    if(this.themes)
      return;
    this.themes       = new Object();
    this.themes.vista = new Object();
    this.themes.osx   = new Object();
  
    this.themes.vista.images = ["images/dialog/Vista/btnClose.png", "images/dialog/Vista/btnCloseOver.png", "images/dialog/Vista/btnMax.png", "images/dialog/Vista/btnMaxOver.png", "images/dialog/Vista/btnRestore.png", "images/dialog/Vista/btnRestoreOver.png", "images/dialog/Vista/sliceTL.png", "images/dialog/Vista/sliceTR.png", "images/dialog/Vista/sliceT.png", "images/dialog/Vista/sliceL.png", "images/dialog/Vista/sliceR.png", "images/dialog/Vista/sliceBL.png", "images/dialog/Vista/sliceBR.png", "images/dialog/Vista/sliceB.png"];
    this.themes.osx.images   = ["images/dialog/OSX/btnClose.png", "images/dialog/OSX/btnCloseOver.png", "images/dialog/OSX/btnMax.png", "images/dialog/OSX/btnMaxOver.png", "images/dialog/OSX/btnRestore.png", "images/dialog/OSX/btnRestoreOver.png", "images/dialog/OSX/sliceTL.png", "images/dialog/OSX/sliceTR.png", "images/dialog/OSX/sliceT.png"];
    this.themes.vista.preloaded = false;
    this.themes.osx.preloaded   = false;
    this.themes.vista.T   = new Object();
    this.themes.vista.T.L = new imgInfo("images/dialog/Vista/sliceTL.png", 8, 28);
    this.themes.vista.T.C = new imgInfo("images/dialog/Vista/sliceT.png",  1, 28);
    this.themes.vista.T.R = new imgInfo("images/dialog/Vista/sliceTR.png", 8, 28);
    this.themes.vista.C   = new Object();
    this.themes.vista.C.L = new imgInfo("images/dialog/Vista/sliceL.png",  8, 1);
    this.themes.vista.C.C = null;
    this.themes.vista.C.R = new imgInfo("images/dialog/Vista/sliceR.png",  8, 1);
    this.themes.vista.B   = new Object();
    this.themes.vista.B.L = new imgInfo("images/dialog/Vista/sliceBL.png", 8, 8);
    this.themes.vista.B.C = new imgInfo("images/dialog/Vista/sliceB.png",  1, 8);
    this.themes.vista.B.R = new imgInfo("images/dialog/Vista/sliceBR.png", 8, 8);
    this.themes.vista.btn = new Object();
    this.themes.vista.btn.close            = new Object();
    this.themes.vista.btn.close.normal     = new imgInfo("images/dialog/Vista/btnClose.png",         27, 18);
    this.themes.vista.btn.close.hover      = new imgInfo("images/dialog/Vista/btnCloseOver.png",     27, 18);
    this.themes.vista.btn.close.disabled   = new imgInfo("images/dialog/Vista/btnCloseDisabled.png", 27, 18);
    this.themes.vista.btn.max              = new Object();
    this.themes.vista.btn.max.normal       = new imgInfo("images/dialog/Vista/btnMax.png",         25, 18);
    this.themes.vista.btn.max.hover        = new imgInfo("images/dialog/Vista/btnMaxOver.png",     25, 18);
    this.themes.vista.btn.max.disabled     = new imgInfo("images/dialog/Vista/btnMaxDisabled.png", 25, 18);
    this.themes.vista.btn.restore          = new Object();
    this.themes.vista.btn.restore.normal   = new imgInfo("images/dialog/Vista/btnRestore.png",         25, 18);
    this.themes.vista.btn.restore.hover    = new imgInfo("images/dialog/Vista/btnRestoreOver.png",     25, 18);
    this.themes.vista.btn.restore.disabled = new imgInfo("images/dialog/Vista/btnRestoreDisabled.png", 25, 18);
    this.themes.vista.btn.width            = this.themes.vista.btn.close.normal.total.width + this.themes.vista.btn.max.normal.total.width;
    this.themes.vista.btn.height           = ((this.themes.vista.btn.close.normal.total.height > this.themes.vista.btn.max.normal.total.height) ? this.themes.vista.btn.close.normal.total.height : this.themes.vista.btn.max.normal.total.height);
    this.themes.vista.title         = new Object();
    this.themes.vista.title.align   = "left";
    this.themes.vista.title.height  = 17;
    this.themes.vista.title.AdjW    = this.themes.vista.T.L.total.width + 25 + 2 + this.themes.vista.btn.max.normal.total.width + this.themes.vista.btn.close.normal.total.width + this.themes.vista.T.R.total.width;
    this.themes.vista.content      = new Object();
    this.themes.vista.content.AdjX = this.themes.vista.C.L.total.width;
    this.themes.vista.content.AdjY = this.themes.vista.T.C.total.height;
    this.themes.vista.content.AdjW = this.themes.vista.C.L.total.width  + this.themes.vista.C.R.total.width;
    this.themes.vista.content.AdjH = this.themes.vista.T.C.total.height + this.themes.vista.B.C.total.height;
    this.themes.osx.T   = new Object();
    this.themes.osx.T.L = new imgInfo("images/dialog/OSX/sliceTL.png", 6, 23);
    this.themes.osx.T.C = new imgInfo("images/dialog/OSX/sliceT.png",  1, 23);
    this.themes.osx.T.R = new imgInfo("images/dialog/OSX/sliceTR.png", 6, 23);
    this.themes.osx.C   = new Object();
    this.themes.osx.C.L = null;
    this.themes.osx.C.C = new Object();
    this.themes.osx.C.C.padT = 0;
    this.themes.osx.C.C.padR = 0;
    this.themes.osx.C.C.padB = 0;
    this.themes.osx.C.C.padL = 0;
    this.themes.osx.C.C.border = new Object();
    this.themes.osx.C.C.border.size  = 1;
    this.themes.osx.C.C.border.color = "#777";
    this.themes.osx.C.R = null;
    this.themes.osx.B   = null;
    this.themes.osx.btn = new Object();
    this.themes.osx.btn.close            = new Object();
    this.themes.osx.btn.close.normal     = new imgInfo("images/dialog/OSX/btnClose.png",           18, 19, 2, 7);
    this.themes.osx.btn.close.hover      = new imgInfo("images/dialog/OSX/btnCloseOver.png",       18, 19, 2, 7);
    this.themes.osx.btn.close.disabled   = new imgInfo("images/dialog/OSX/btnCloseDisabled.png",   18, 19, 2, 7);
    this.themes.osx.btn.max              = new Object();
    this.themes.osx.btn.max.normal       = new imgInfo("images/dialog/OSX/btnMax.png",             18, 19, 2);
    this.themes.osx.btn.max.hover        = new imgInfo("images/dialog/OSX/btnMaxOver.png",         18, 19, 2);
    this.themes.osx.btn.max.disabled     = new imgInfo("images/dialog/OSX/btnMaxDisabled.png",     18, 19, 2);
    this.themes.osx.btn.restore          = new Object();
    this.themes.osx.btn.restore.normal   = new imgInfo("images/dialog/OSX/btnRestore.png",         18, 19, 2);
    this.themes.osx.btn.restore.hover    = new imgInfo("images/dialog/OSX/btnRestoreOver.png",     18, 19, 2);
    this.themes.osx.btn.restore.disabled = new imgInfo("images/dialog/OSX/btnRestoreDisabled.png", 18, 19, 2);
    this.themes.osx.btn.width       = this.themes.osx.btn.close.normal.total.width + this.themes.osx.btn.max.normal.total.width;
    this.themes.osx.btn.height      = ((this.themes.osx.btn.close.normal.total.height > this.themes.osx.btn.max.normal.total.height) ? this.themes.osx.btn.close.normal.total.height : this.themes.osx.btn.max.normal.total.height);
    this.themes.osx.title         = new Object();
    this.themes.osx.title.align   = "center";
    this.themes.osx.title.height  = 17;
    this.themes.osx.title.AdjW    = this.themes.osx.T.L.total.width + 25 + 2 + this.themes.osx.btn.max.normal.total.width + this.themes.osx.btn.close.normal.total.width + this.themes.osx.T.R.total.width;
    this.themes.osx.content       = new Object();
    this.themes.osx.content.AdjX  = this.themes.osx.C.C.border.size + this.themes.osx.C.C.padL;
    this.themes.osx.content.AdjY  = this.themes.osx.T.C.total.height + this.themes.osx.C.C.border.size + this.themes.osx.C.C.padT;
    this.themes.osx.content.AdjW  = (this.themes.osx.C.C.border.size * 2) + this.themes.osx.C.C.padL + this.themes.osx.C.C.padR;
    this.themes.osx.content.AdjH  = this.themes.osx.T.C.total.height + (this.themes.osx.C.C.border.size * 2) + this.themes.osx.C.C.padT + this.themes.osx.C.C.padB;
    return;
  }

  this.preload = function()
  {
    if(!this.current || this.current.preloaded)
      return;
    for(var l_nImg in this.current.images)
      preloadImg(this.current.images[l_nImg]);
    this.current.preloaded = true;
    return;
  }

  this.set = function(p_strName, p_nWidth, p_nHeight)
  {
    var l_objSize = new Object();

    if(!this.themes)
      this.init();
    l_strName = ((p_strName) ? p_strName : this.nameDefault).toLowerCase();
    this.current = this.themes[l_strName];
    this.preload();

    l_objSize.content        = new Object();
    l_objSize.content.adjX   = this.current.content.AdjX;
    l_objSize.content.adjY   = this.current.content.AdjY;
    l_objSize.content.width  = (p_nWidth == 0)  ? (this.browser.winWidth() - 16)  : p_nWidth;
    l_objSize.content.height = (p_nHeight == 0) ? (this.browser.winHeight() - 36) : p_nHeight;
    l_objSize.window         = new Object();
    l_objSize.window.width   = l_objSize.content.width  + this.current.content.AdjW;
    l_objSize.window.height  = l_objSize.content.height + this.current.content.AdjH;
    l_objSize.title          = new Object();
    l_objSize.title.width    = l_objSize.window.width - this.current.title.AdjW;
    l_objSize.title.height   = this.current.title.height;
    return l_objSize;
  }

  this.unset = function()
  {
    this.current = null;
  }
}

function Status_Refresh(p_objThis)
{
  p_objThis.refresh();
}

function Status_Message(p_strDivName, p_vecMsg, p_strMsgClass)
{
  this.m_vecMsg       = p_vecMsg;
  this.m_strMsgClass  = p_strMsgClass;
  this.m_vecBuffer    = null;
  this.m_intvTimer    = null;
  this.m_strDivName   = "";
  this.m_nIdx         = 0;
  this.m_nWalker      = 0;
  this.m_objDiv       = document.getElementById(p_strDivName);

  this.refresh = function()
  {
    if(this.m_vecMsg && this.m_vecMsg.length)
    {
      this.m_nIdx++;
      if(this.m_nIdx > this.m_vecMsg.length)
        this.m_nIdx = ((this.m_vecMsg.length < 1) ? 0 : 1);
      if(this.m_nIdx > 0)
      {
        this.m_vecBuffer = [];
        if(this.m_strMsgClass && this.m_strMsgClass.length > 0)
        {
          this.m_vecBuffer.push("<font class='");
          this.m_vecBuffer.push(this.m_strMsgClass);
          this.m_vecBuffer.push("'>");
        }
        for(this.m_nWalker = 0; this.m_nWalker < this.m_nIdx; this.m_nWalker++)
          this.m_vecBuffer.push(this.m_vecMsg[this.m_nWalker]);
        if(this.m_strMsgClass && this.m_strMsgClass.length > 0)
          this.m_vecBuffer.push("</font>");
        this.m_objDiv.innerHTML = this.m_vecBuffer.join("");
      }
    }
  }

  this.start = function(p_nInterval, p_strObjName)
  {
    this.refresh();
    if(this.m_intvTimer != null)
      clearInterval(this.m_intvTimer);
    this.m_intvTimer = setInterval(strcat("Status_Refresh(", p_strObjName, ")"), ((p_nInterval && p_nInterval > 0) ? p_nInterval : 150));   
  }

  this.stop = function(p_strStopMsg)
  {
    if(this.m_intvTimer != null)
      clearInterval(this.m_intvTimer);
    this.m_intvTimer = null;
    this.m_nIdx      = 0;

    if(this.m_objDiv && this.m_objDiv.innerHTML)
      this.m_objDiv.innerHTML = (p_strStopMsg) ? p_strStopMsg : "";
  }
}

var g_objTheme        = new popupTheme();
var g_objBrowser      = g_objTheme.browser;
var g_vecPopUpDivs    = new Array();
var g_objDragIt       = new Object();
var g_objMaxProps     = null;
var g_vecTabIndexes   = new Array();                                         
var g_vecTabbableTags = new Array("A","SUBMIT","IMAGE","BUTTON","TEXTAREA","INPUT","IFRAME");
var g_bPopupIsShown   = false;
var g_nScrollLockX    = 0;
var g_nScrollLockY    = 0;
var g_mapFuncRet      = new Array();
var g_objStatMsg      = null;
var g_objSort         = null;

g_objDragIt.zIndex = 50;

function toggleClass(p_strTable, p_vecCols, p_vecClassNames)
{
  var l_objTbl  = document.getElementById(p_strTable);
  var l_objBods = ((!l_objTbl) ? null : l_objTbl.tBodies);
  var l_nIdxB   = 0;
  var l_nLenB   = ((!l_objBods) ? 0 : l_objBods.length);
  var l_nIdxR   = 0;
  var l_nLenR   = 0;
  var l_nIdxC   = 0;
  var l_nLenC   = p_vecCols.length;
  var l_nToggle = 0;
  var l_nMod    = p_vecClassNames.length;
  var l_strCls  = null;

  if(!l_objBods)
    return;
  for(l_nIdxB = 0; l_nIdxB < l_nLenB; ++l_nIdxB)
  {
    if(l_objBods[l_nIdxB].tagName && l_objBods[l_nIdxB].tagName.toUpperCase() != "TBODY")
      continue;
    l_nLenR = l_objBods[l_nIdxB].rows.length;
    for(l_nIdxR = 0; l_nIdxR < l_nLenR; ++l_nIdxR)
    {
      l_strCls = p_vecClassNames[l_nToggle];
      l_nToggle = ((l_nToggle + 1) % l_nMod);
      for(l_nIdxC = 0; l_nIdxC < l_nLenC; ++l_nIdxC)
        if(p_vecCols[l_nIdxC] >= 0 && p_vecCols[l_nIdxC] < l_objBods[l_nIdxB].rows[l_nIdxR].cells.length)
          l_objBods[l_nIdxB].rows[l_nIdxR].cells[p_vecCols[l_nIdxC]].className = l_strCls;  
    }
  }
  return;
}

function sortByColumn(p_objCol)
{
  var l_strTableID = ((g_objSort && g_objSort.columnid[p_objCol.id]) ? g_objSort.columnid[p_objCol.id].tableid : null);
  var l_objSortItm = ((l_strTableID) ? g_objSort.table[l_strTableID] : null);
  var l_objHdr     = null;
  var l_bReverse   = false;

  if(!l_objSortItm || !l_objSortItm.loaded)
    return;
  if(l_objSortItm.coldir != 0)
  {
    if(l_objSortItm.colid != p_objCol.id)
    {
      if((l_objHdr = document.getElementById(l_objSortItm.colid)))
        l_objHdr.innerHTML = g_objSort.columnid[l_objSortItm.colid].header;
      l_objSortItm.coldir = 0;
    }
    else
      l_bReverse = true;
  }
  l_objSortItm.colid = p_objCol.id;
  l_objSortItm.coldir = ((l_objSortItm.coldir == 0) ? 1 : (l_objSortItm.coldir * -1));
  if(l_objSortItm.coldir < 0 || l_bReverse)
    reverseRows(l_strTableID, l_objSortItm);
  else
    sortRows(l_strTableID, l_objSortItm);
  if((l_objHdr = document.getElementById(l_objSortItm.colid)))
    l_objHdr.innerHTML = strcat(g_objSort.columnid[l_objSortItm.colid].header, "<img src=\"", l_objSortItm.img[l_objSortItm.coldir], "\" border=\"0\">");
  return;
}

function sortRows(p_strTable, p_objSortItm)
{
  var l_objTbl  = document.getElementById(p_strTable);
  var l_objBods = ((!l_objTbl) ? null : l_objTbl.tBodies);
  var l_objRows = null;
  var l_objItm  = null;
  var l_vecTemp = null;
  var l_vecCols = null;
  var l_nColIdx = ((!p_objSortItm) ? 0 : p_objSortItm.colmap[p_objSortItm.colid]);
  var l_nIdx    = 0;
  var l_nLen    = ((!p_objSortItm || !p_objSortItm.cols) ? 0 : p_objSortItm.cols.length);

  if(!l_objBods || !p_objSortItm || p_objSortItm.bodycount == 0) 
    return;
  l_vecTemp = [];
  l_vecCols = [];
  l_vecCols.push(l_nColIdx);
  for(l_nIdx = 0; l_nIdx < l_nLen; ++l_nIdx)
    if(p_objSortItm.cols[l_nIdx] != l_nColIdx)
      l_vecCols.push(p_objSortItm.cols[l_nIdx]);
  if(p_objSortItm.bodycount == 1)
  {
    l_objRows = ((!l_objBods[p_objSortItm.bodystart]) ? null : l_objBods[p_objSortItm.bodystart].rows);
    l_nLen    = ((!l_objRows) ? 0 : l_objRows.length);
    for(l_nIdx = 0; l_nIdx < l_nLen; ++l_nIdx)
      if((l_objItm = getRowItm(l_objRows, l_nIdx, p_objSortItm, l_vecCols)))
        l_vecTemp.push(l_objItm);
  }
  else
  {
    l_nLen = l_objBods.length;
    for(l_nIdx = p_objSortItm.bodystart; l_nIdx < l_nLen; ++ l_nIdx)
      if((l_objItm = getBodyItm(l_objBods, l_nIdx, p_objSortItm, l_vecCols)))
        l_vecTemp.push(l_objItm);
  }
  if(l_vecTemp.length > 1)
  {
    sortTableVector(l_vecTemp, l_vecCols);
    if(p_objSortItm.bodycount == 1)
      l_objTbl = l_objBods[p_objSortItm.bodystart];
    if(l_objTbl)
    {
      for(l_nIdx = 0; l_nIdx < l_vecTemp.length; ++l_nIdx)
        l_objTbl.appendChild(l_vecTemp[l_nIdx].item);
    }
  }
  delete l_vecTemp;
  delete l_vecCols;
  return;
}

function sortTableVector(p_vecItems, p_vecCols, p_nStart, p_nStop)
{
  if(p_vecItems.length > 15)
    qsortTableVector(p_vecItems, p_vecCols, 0, (p_vecItems.length - 1));
  else
    bbsortTableVector(p_vecItems, p_vecCols);
  return;
}

function bbsortTableVector(p_vecItems, p_vecCols)
{
  var l_nUp    = 0;
  var l_nDown  = 0;
  var l_nOther = 0;
  var l_nLen   = (p_vecItems.length - 1);

  for(l_nUp = 0; l_nUp < l_nLen; ++l_nUp)
  {
    if(cmpItems(p_vecItems[l_nUp], p_vecItems[(l_nOther = (l_nUp + 1))], p_vecCols) > 0)
    {
      swpItems(p_vecItems, l_nUp, l_nOther);
      for(l_nDown = l_nUp; l_nDown > 0; --l_nDown)
      {
        if(cmpItems(p_vecItems[(l_nOther = (l_nDown - 1))], p_vecItems[l_nDown], p_vecCols) > 0)
        {
          swpItems(p_vecItems, l_nDown, l_nOther);
          continue;
        }
        break;
      }
    }
  }
  return;
}

function qsortTableVector(p_vecItems, p_vecCols, p_nFirst, p_nLast)
{
   var l_objMid = null;
   var l_nUp    = p_nFirst;
   var l_nDown  = p_nLast;
   
   if(!p_vecItems || p_nFirst >= p_nLast)
     return;
   l_objMid = p_vecItems[l_nUp++];
   while(l_nUp < l_nDown)
   {
     while(l_nUp <= p_nLast && cmpItems(p_vecItems[l_nUp], l_objMid, p_vecCols) <= 0)
       ++l_nUp;
     while(l_nDown >= 0 && cmpItems(p_vecItems[l_nDown], l_objMid, p_vecCols) > 0)
       --l_nDown;
     if(l_nUp < l_nDown)
       swpItems(p_vecItems, l_nUp, l_nDown);
   }
   p_vecItems[p_nFirst] = p_vecItems[l_nDown];
   p_vecItems[l_nDown] = l_objMid;
   if(p_nFirst < (l_nDown - 1))
     qsortTableVector(p_vecItems, p_vecCols, p_nFirst, (l_nDown - 1));
   if((l_nDown + 1) < p_nLast)
     qsortTableVector(p_vecItems, p_vecCols, (l_nDown + 1), p_nLast);
   return;
}


function cmpItems(p_objItm1, p_objItm2, p_vecCols)
{
  var l_nIdx = 0;
  var l_nLen = ((!p_vecCols) ? 0 : p_vecCols.length);

  for(l_nIdx = 0; l_nIdx < l_nLen; ++l_nIdx)
  {
    if(p_objItm1.cmpval[p_vecCols[l_nIdx]] < p_objItm2.cmpval[p_vecCols[l_nIdx]])
      return -1;
    if(p_objItm1.cmpval[p_vecCols[l_nIdx]] > p_objItm2.cmpval[p_vecCols[l_nIdx]])
      return 1;
  }
  return 0;
}

function swpItems(p_vecItems, p_nIdx1, p_nIdx2)
{
  var l_objTmp = p_vecItems[p_nIdx1];

  p_vecItems[p_nIdx1] = p_vecItems[p_nIdx2];
  p_vecItems[p_nIdx2] = l_objTmp;
  return;
}

function getBodyItm(p_objBodies, p_nBodyIdx, p_objSortItm, p_vecCols)
{
   var l_objBody = ((!p_objBodies || p_nBodyIdx < 0 || p_nBodyIdx >= p_objBodies.length) ? null : p_objBodies[p_nBodyIdx]);
   var l_objRet  = ((!l_objBody || !l_objBody.rows) ? null : getRowItm(l_objBody.rows, 0, p_objSortItm, p_vecCols));

   if(l_objRet)
     l_objRet.item = l_objBody;
   return l_objRet;
}

function getRowItm(p_objRows, p_nRowIdx, p_objSortItm, p_vecCols)
{
  var l_objRow   = ((!p_objRows || p_nRowIdx < 0 || p_nRowIdx >= p_objRows.length) ? null : p_objRows[p_nRowIdx]);
  var l_objCells = null;
  var l_objRet   = new Object();
  var l_nBase    = 10;
  var l_nIdx     = 0;
  var l_nLen     = ((!p_vecCols) ? 0 : p_vecCols.length);

  l_objRet.item = null;
  if(p_objSortItm && p_objSortItm.bodycount < 2)
    l_objRet.item = l_objRow;
  l_objCells = ((!l_objRow) ? null : l_objRow.cells);
  l_objRet.cmpval = new Object();
  for(l_nIdx = 0; l_nIdx < l_nLen; ++l_nIdx)
  {
    l_objRet.cmpval[l_nIdx] = ((!l_objCells || p_vecCols[l_nIdx] < 0 || p_vecCols[l_nIdx] >= l_objCells.length) ? null : l_objCells[p_vecCols[l_nIdx]]);
    l_objRet.cmpval[l_nIdx] = ((!l_objRet.cmpval[l_nIdx]) ? null : l_objRet.cmpval[l_nIdx].innerHTML);
    if(!l_objRet.cmpval[l_nIdx] || l_objRet.cmpval[l_nIdx] == "&nbsp;")
      l_objRet.cmpval[l_nIdx] = "";
    if(!p_objSortItm || !p_objSortItm.colinfo || !p_objSortItm.colinfo[p_vecCols[l_nIdx]] || !p_objSortItm.colinfo[p_vecCols[l_nIdx]].type)
      continue;
    if(p_objSortItm.colinfo[p_vecCols[l_nIdx]].type == "F")
    {
      l_objRet.cmpval[l_nIdx] = ((l_objRet.cmpval[l_nIdx] == "") ? 0.0 : getNumber(l_objRet.cmpval[l_nIdx]));
      l_objRet.cmpval[l_nIdx] = ((isNaN(l_objRet.cmpval[l_nIdx])) ? 0.0 : l_objRet.cmpval[l_nIdx]);
    }
    else if(p_objSortItm.colinfo[p_vecCols[l_nIdx]].type == "N")
    {
      l_nBase = ((!p_objSortItm.colinfo[p_vecCols[l_nIdx]].fmt || !p_objSortItm.colinfo[p_vecCols[l_nIdx]].fmt.length < 1) ? 10 : parseInt(p_objSortItm.colinfo[p_vecCols[l_nIdx]].fmt, 10));
      l_nBase = ((isNaN(l_nBase)) ? 10 : l_nBase);
      l_objRet.cmpval[l_nIdx] = ((l_objRet.cmpval[l_nIdx] == "") ? 0 : getNumber(l_objRet.cmpval[l_nIdx], l_nBase));
      l_objRet.cmpval[l_nIdx] = ((isNaN(l_objRet.cmpval[l_nIdx])) ? 0 : l_objRet.cmpval[l_nIdx]);
    }
  }
  return l_objRet;
}

function reverseRows(p_strTable, p_objSortItm)
{
  var l_objTbl  = document.getElementById(p_strTable);
  var l_objBods = ((!l_objTbl) ? null : l_objTbl.tBodies);
  var l_vecItms = null;
  var l_nIdx    = 0;
  var l_nLen    = 0;
  
  if(!l_objBods)
    return;
  l_vecItms = [];
  if(p_objSortItm.bodycount == 1)
  {
    if((l_objTbl = l_objBods[p_objSortItm.bodystart]) && l_objTbl.rows && (l_nLen = l_objTbl.rows.length) > 1)
      for(l_nIdx = 0; l_nIdx < l_nLen; ++l_nIdx)
        l_vecItms.push(l_objTbl.rows[l_nIdx]);
  }
  else if((l_nLen = l_objBods.length) > 1)
  {
    for(l_nIdx = p_objSortItm.bodystart; l_nIdx < l_nLen; ++l_nIdx)
    {
      if(l_objBods[l_nIdx].tagName && l_objBods[l_nIdx].tagName.toUpperCase() != "TBODY")
        continue;
      l_vecItms.push(l_objBods[l_nIdx]);
    }
  }
  if(l_objTbl && l_vecItms.length > 1)
  {
    for(l_nIdx = l_vecItms.length - 1; l_nIdx >= 0; --l_nIdx)
      l_objTbl.appendChild(l_vecItms[l_nIdx]);
  }
  delete l_vecItms;
  return;
}

function sortTable(p_strTableID, p_strImgU, p_strImgD, p_vecCols)
{
  var l_objSortItm = null;
  var l_objTable   = null;
  var l_objBodies  = null;
  var l_objCell    = null;
  var l_objHdr     = null;

  if(!g_objSort)
    g_objSort = { "table" : new Object(), "columnid" : new Object() };
  l_objSortItm = g_objSort.table[p_strTableID] = new Object();
  l_objTable   = document.getElementById(p_strTableID);
  l_objSortItm.loaded = false;
  if(!l_objTable)
    return;
  l_objHdr = document.getElementById(p_strTableID + "Header");
  if(!l_objHdr)
    return;
  l_objSortItm.cols    = p_vecCols;
  l_objSortItm.coldir  = 0;
  l_objSortItm.colid   = "";
  l_objSortItm.img     = new Object();
  l_objSortItm.img[1]  = ((p_strImgD) ? p_strImgD : "images/darr.gif");
  l_objSortItm.img[-1] = ((p_strImgU) ? p_strImgU : "images/uarr.gif");
  preloadImg(l_objSortItm.img[1]);
  preloadImg(l_objSortItm.img[-1]);
  l_objSortItm.colmap  = new Object();
  l_objSortItm.colinfo = new Object();
  if(l_objSortItm.cols)
  {
    for(l_nIdx = 0; l_nIdx < l_objSortItm.cols.length; ++l_nIdx)
      setColumnSortData(p_strTableID, l_objSortItm, l_objHdr.rows[0].cells, l_objSortItm.cols[l_nIdx]);
  }
  else
  {
    for(l_nIdx = 0; l_nIdx < l_objHdr.rows[0].cells.length; ++l_nIdx)
    {
      if(!l_objHdr.rows[0].cells[l_nIdx].id || l_objHdr.rows[0].cells[l_nIdx].id.length < 1)
        continue;
      setColumnSortData(p_strTableID, l_objSortItm, l_objHdr.rows[0].cells, l_nIdx);
    }
  }
  l_objSortItm.bodystart = null;
  l_objSortItm.bodycount = 0;
  l_objBodies = l_objTable.tBodies;
  for(l_nIdx = 0; l_objBodies && l_nIdx < l_objBodies.length; ++l_nIdx)
  {
    if(l_objBodies[l_nIdx].tagName && l_objBodies[l_nIdx].tagName.toUpperCase() != "TBODY")
      continue;
    if(l_objSortItm.bodystart == null)
      l_objSortItm.bodystart = l_nIdx;
    ++l_objSortItm.bodycount;
  }
  l_objSortItm.loaded = true;
}

function setColumnSortData(p_strTableID, p_objSortItm, p_objCells, p_nIdx)
{
  var l_vecType = null;

  p_objSortItm.colinfo[p_nIdx] = new Object();
  p_objSortItm.colinfo[p_nIdx].type = 'S';
  p_objSortItm.colinfo[p_nIdx].fmt  = '';
  if(!p_objCells[p_nIdx].id || p_objCells[p_nIdx].id.length < 1)
    return;
  p_objSortItm.colmap[p_objCells[p_nIdx].id] = p_nIdx;
  if((l_vecType = /^.*\_(?:([fFnN])(.*))$/.exec(p_objCells[p_nIdx].id)) && l_vecType.length >= 2)
  {
    p_objSortItm.colinfo[p_nIdx].type = l_vecType[1].toUpperCase();
    p_objSortItm.colinfo[p_nIdx].fmt  = ((l_vecType.length > 2 || !l_vecType[2] || l_vecType[2].length < 1) ? ((p_objSortItm.colinfo[p_nIdx].type == 'N') ? "10" : "") : l_vecType[2]);
  }
  g_objSort.columnid[p_objCells[p_nIdx].id] = new Object();
  g_objSort.columnid[p_objCells[p_nIdx].id].tableid = p_strTableID;
  g_objSort.columnid[p_objCells[p_nIdx].id].header  = p_objCells[p_nIdx].innerHTML;
  return;
}

function startDrag(p_objEvent, p_objThis, p_strID)
{
  if(g_objMaxProps)
    return;   
  g_objDragIt.caller = p_objThis;
  document.body.style.cursor = 'move';
  if(g_objDragIt.caller && g_objDragIt.caller.style)
    g_objDragIt.caller.style.cursor = 'move';
  if(p_strID)
    g_objDragIt.objTarget = document.getElementById(p_strID);
  else
  {
    if(g_objTheme.browser.isIE())
      g_objDragIt.objTarget = window.event.srcElement;
    else if(g_objTheme.browser.isNS())
      g_objDragIt.objTarget = p_objEvent.target;
    if(g_objDragIt.objTarget.nodeType && g_objDragIt.objTarget.nodeType == 3)
      g_objDragIt.objTarget = g_objDragIt.objTarget.parentNode;
  }
  if(!g_objDragIt.objTarget)
    return;
  g_objDragIt.limits = new Object();    
  g_objDragIt.start  = new Object();
  if(g_objTheme.browser.isIE())
  {
    g_objDragIt.start.X = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
    g_objDragIt.start.Y = window.event.clientY + document.documentElement.scrollTop  + document.body.scrollTop;
  }
  else if(g_objTheme.browser.isNS())
  {
    g_objDragIt.start.X = p_objEvent.clientX + window.scrollX;
    g_objDragIt.start.Y = p_objEvent.clientY + window.scrollY;
  }
  if(isNaN(g_objDragIt.start.Top))
    g_objDragIt.start.Top  = 0;
  if(isNaN(g_objDragIt.start.Left))
    g_objDragIt.start.Left = 0;
  g_objDragIt.start.Top  = parseInt(g_objDragIt.objTarget.style.top,  10);
  g_objDragIt.start.Left = parseInt(g_objDragIt.objTarget.style.left, 10);  
  g_objDragIt.limits.Top  = g_objTheme.browser.winHeight() - parseInt(g_objDragIt.objTarget.style.height, 10);
  g_objDragIt.limits.Left = g_objTheme.browser.winWidth()  - parseInt(g_objDragIt.objTarget.style.width,  10);
  if(g_objDragIt.limits.Top < 0)
    g_objDragIt.limits.Top = 0;
  if(g_objDragIt.limits.Left < 0)
    g_objDragIt.limits.Left = 0;
  g_objDragIt.objTarget.style.zIndex = ++g_objDragIt.zIndex;
  if(g_objTheme.browser.isIE())
  {
    document.attachEvent("onmousemove", doDrag);
    document.attachEvent("onmouseup",   stopDrag);
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  else if(g_objTheme.browser.isNS())
  {
    document.addEventListener("mousemove", doDrag,   true);
    document.addEventListener("mouseup",   stopDrag, true);
    p_objEvent.preventDefault();
  }
  return;
}

function stopDrag(p_objEvent)
{
  g_objDragIt.objTarget = null;
  if(g_objTheme.browser.isIE())
  {
    document.detachEvent("onmousemove", doDrag);
    document.detachEvent("onmouseup",   stopDrag);
  }
  else if(g_objTheme.browser.isNS())
  {
    document.removeEventListener("mousemove", doDrag,   true);
    document.removeEventListener("mouseup",   stopDrag, true);
  }
  document.body.style.cursor = 'default';
  if(g_objDragIt.caller && g_objDragIt.caller.style)
    g_objDragIt.caller.style.cursor = 'default';
  g_objDragIt.caller = null;
}

function doDrag(p_objEvent)
{
  var l_nCurX = 0;
  var l_nCurY = 0;
  var l_nTop  = 0;
  var l_nLeft = 0;

  if(!g_objDragIt.objTarget)
    return;
  if(g_objTheme.browser.isIE())
  {
    l_nCurX = window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
    l_nCurY = window.event.clientY + document.documentElement.scrollTop  + document.body.scrollTop; 
  }
  else if(g_objTheme.browser.isNS())
  {
    l_nCurX = p_objEvent.clientX + window.scrollX;
    l_nCurY = p_objEvent.clientY + window.scrollY;
  }  
  l_nTop  = g_objDragIt.start.Top  + l_nCurY - g_objDragIt.start.Y;
  l_nLeft = g_objDragIt.start.Left + l_nCurX - g_objDragIt.start.X;
  if(l_nTop < 0)
    l_nTop = 0;
  if(l_nTop > g_objDragIt.limits.Top)
    l_nTop = g_objDragIt.limits.Top;
  if(l_nLeft < 0)
    l_nLeft = 0;
  if(l_nLeft > g_objDragIt.limits.Left)
    l_nLeft = g_objDragIt.limits.Left;
  g_objDragIt.objTarget.style.top  = l_nTop  + "px";
  g_objDragIt.objTarget.style.left = l_nLeft + "px";
  if(g_objTheme.browser.isIE())
  {
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  else if(g_objTheme.browser.isNS())
    p_objEvent.preventDefault();    
}

function overBtn(p_objImg, p_bOver)
{
  if(p_objImg.id)
  {
    if(p_objImg.id == "imgMax")
      changeImg(p_objImg, ((p_bOver) ? g_objTheme.current.btn.max.hover.src : g_objTheme.current.btn.max.normal.src));
    else if(p_objImg.id == "imgRestore")
      changeImg(p_objImg, ((p_bOver) ? g_objTheme.current.btn.restore.hover.src : g_objTheme.current.btn.restore.normal.src));
    else if(p_objImg.id == "imgClose")
      changeImg(p_objImg, ((p_bOver) ? g_objTheme.current.btn.close.hover.src : g_objTheme.current.btn.close.normal.src));
  }
  return;
}

function trimUnits(p_strValue)
{
  return p_strValue.replace(/[^\d\.]/g, "") * 1;
}

function maximizeWin(p_strDivName)
{
  var l_strDivName = "div" + p_strDivName;
  var l_objDivs    = g_vecPopUpDivs[p_strDivName];
  var l_objItm     = null;
  var l_nWinW      = null;
  var l_nWinH      = null;

  if(!l_objDivs)
    return;
  l_nWinW = g_objTheme.browser.winWidth();
  l_nWinH = g_objTheme.browser.winHeight();
  if(g_objMaxProps)
  {
    if((l_objItm = document.getElementById(l_strDivName + "_Title")))
      l_objItm.style.width = g_objMaxProps.titleW + "px";
    if((l_objItm = document.getElementById("td" + p_strDivName)))
      l_objItm.style.width = (g_objMaxProps.titleW + 2) + "px";
    if((l_objItm = document.getElementById(l_strDivName + "_Content")))
    {
      l_objItm.style.width  = g_objMaxProps.contentW + "px";
      l_objItm.style.height = g_objMaxProps.contentH + "px";
    }
    if((l_objItm = document.getElementById("tbl" + p_strDivName)))
    {
      l_objItm.style.width  = g_objMaxProps.tableW + "px";
      l_objItm.style.height = g_objMaxProps.tableH + "px";
    }
    if((l_objItm = l_objDivs.window))
    {
      l_objItm.style.width  = g_objMaxProps.winW + "px";
      l_objItm.style.height = g_objMaxProps.winH + "px"; 
      l_objItm.style.left   = (g_objMaxProps.winX) + "px";
      l_objItm.style.top    = (g_objMaxProps.winY) + "px";
    }
    if((l_objItm = l_objDivs.innermask))
    {
      l_objItm.style.width  = g_objMaxProps.innerMaskW + "px";
      l_objItm.style.height = g_objMaxProps.innerMaskH + "px"; 
      l_objItm.style.left   = (g_objMaxProps.innerMaskX) + "px";
      l_objItm.style.top    = (g_objMaxProps.innerMaskY) + "px";
    }    
    if((l_objItm = document.getElementById("imgRestore")))
    {
      l_objItm.id    = "imgMax";
      l_objItm.alt   = "Maximize";
      l_objItm.title = "Maximize Window";
      overBtn(l_objItm, false);
    }
    g_objMaxProps = null;
  }
  else
  {
    g_objMaxProps = new Object();
    l_objDivs;
    if((l_objItm = l_objDivs.mask))
    {
      g_objMaxProps.maskX = trimUnits(l_objItm.style.left);
      g_objMaxProps.maskY = trimUnits(l_objItm.style.top);
    }
    if((l_objItm = l_objDivs.window))
    {
      g_objMaxProps.winX    = trimUnits(l_objItm.style.left) - g_objMaxProps.maskX;
      g_objMaxProps.winY    = trimUnits(l_objItm.style.top)  - g_objMaxProps.maskY;
      g_objMaxProps.winW    = trimUnits(l_objItm.style.width);
      g_objMaxProps.winH    = trimUnits(l_objItm.style.height);
      l_objItm.style.left   = g_nScrollLockX + "px";
      l_objItm.style.top    = g_nScrollLockY + "px";
      l_objItm.style.width  = l_nWinW        + "px";
      l_objItm.style.height = l_nWinH        + "px";
    }
    if((l_objItm = l_objDivs.innermask))
    {
      g_objMaxProps.innerMaskX = trimUnits(l_objItm.style.left) - g_objMaxProps.maskX;
      g_objMaxProps.innerMaskY = trimUnits(l_objItm.style.top)  - g_objMaxProps.maskY;
      g_objMaxProps.innerMaskW = trimUnits(l_objItm.style.width);
      g_objMaxProps.innwrMaskH = trimUnits(l_objItm.style.height);
      l_objItm.style.left      = (g_nScrollLockX + g_objTheme.current.content.AdjX) + "px";
      l_objItm.style.top       = (g_nScrollLockY + g_objTheme.current.content.AdjY) + "px";
      l_objItm.style.width     = (l_nWinW - g_objTheme.current.content.AdjW)        + "px";
      l_objItm.style.height    = (l_nWinH - g_objTheme.current.content.AdjH)        + "px";
    }    
    if((l_objItm = document.getElementById("tbl" + p_strDivName)))
    {
      g_objMaxProps.tableW  = trimUnits(l_objItm.style.width);
      g_objMaxProps.tableH  = trimUnits(l_objItm.style.height);
      l_objItm.style.width  = l_nWinW        + "px";
      l_objItm.style.height = l_nWinH        + "px";
    }
    if((l_objItm = document.getElementById(l_strDivName + "_Title")))
    {
      g_objMaxProps.titleW = trimUnits(l_objItm.style.width);
      l_objItm.style.width = (l_nWinW - g_objTheme.current.title.AdjW) + "px";
    }
    if((l_objItm = document.getElementById("td" + p_strDivName)))
      l_objItm.style.width = ((l_nWinW - g_objTheme.current.title.AdjW) + 2) + "px";
    if((l_objItm = document.getElementById(l_strDivName + "_Content")))
    {
      g_objMaxProps.contentW = trimUnits(l_objItm.style.width);
      g_objMaxProps.contentH = trimUnits(l_objItm.style.height);
      l_objItm.style.width   = (l_nWinW - g_objTheme.current.content.AdjW) + "px";
      l_objItm.style.height  = (l_nWinH - g_objTheme.current.content.AdjH) + "px";
    }
    if((l_objItm = document.getElementById("imgMax")))
    {
      l_objItm.id    = "imgRestore";
      l_objItm.alt   = "Restore";
      l_objItm.title = "Restore Window";
      overBtn(l_objItm, false);
    }
  }
  return;
}

function keyDownHandler(p_objEvent)
{
  if(g_bPopupIsShown && g_objTheme.browser.getKeyCode(p_objEvent) == 9)
    return g_objTheme.browser.cancelEvent();
}

function onScrollHandler(p_objEvent)
{
  if(g_bPopupIsShown)
  {
    if(window.scrollTo)
      window.scrollTo(g_nScrollLockX, g_nScrollLockY);
    else if(window.scroll)
      window.scroll(g_nScrollLockX, g_nScrollLockY);
  }
}

function disableTabIndexes()
{
  if(document.all)
  {
    var l_nIdxStored = 0;
    for(var l_nIdxTagType = 0; l_nIdxTagType < g_vecTabbableTags.length; l_nIdxTagType++)
    {
      var l_vecTagElements = document.getElementsByTagName(g_vecTabbableTags[l_nIdxTagType]);
      for(var l_nIdxFrmElem = 0; l_nIdxFrmElem < l_vecTagElements.length; l_nIdxFrmElem++)
      {
        g_vecTabIndexes[l_nIdxStored] = l_vecTagElements[l_nIdxFrmElem].tabIndex;
        l_vecTagElements[l_nIdxFrmElem].tabIndex = "-1";
        l_nIdxStored++;
      }
    }
  }
}

function restoreTabIndexes()
{
  if(document.all)
  {
    var l_nIdxStored = 0;
    for(var l_nIdxTagType = 0; l_nIdxTagType < g_vecTabbableTags.length; l_nIdxTagType++)
    {
      var l_vecTagElements = document.getElementsByTagName(g_vecTabbableTags[l_nIdxTagType]);
      for(var l_nIdxFrmElem = 0; l_nIdxFrmElem < l_vecTagElements.length; l_nIdxFrmElem++)
      {
        l_vecTagElements[l_nIdxFrmElem].tabIndex = g_vecTabIndexes[l_nIdxStored];
        l_vecTagElements[l_nIdxFrmElem].tabEnabled = true;
        l_nIdxStored++;
      }
    }
  }
}

function hideSelectBoxes()
{
  for(var l_nIdxFrm = 0; l_nIdxFrm < document.forms.length; l_nIdxFrm++)
  {
    for(var l_nIdxEle = 0; l_nIdxEle < document.forms[l_nIdxFrm].length; l_nIdxEle++)
    {
      if(document.forms[l_nIdxFrm].elements[l_nIdxEle].tagName == "SELECT")         
        document.forms[l_nIdxFrm].elements[l_nIdxEle].style.visibility = "hidden";
    }
  }
}

function displaySelectBoxes()
{
  for(var l_nIdxFrm = 0; l_nIdxFrm < document.forms.length; l_nIdxFrm++)
  {
    for(var l_nIdxEle = 0; l_nIdxEle < document.forms[l_nIdxFrm].length; l_nIdxEle++)
    {
      if(document.forms[l_nIdxFrm].elements[l_nIdxEle].tagName == "SELECT")
        document.forms[l_nIdxFrm].elements[l_nIdxEle].style.visibility = "visible";
    }
  }
}

function onDivKeyPress(p_objEvent, p_strDivName)
{
  switch(g_objTheme.browser.getKeyCode(p_objEvent))
  {
    case 27 : hide_popup(p_strDivName);
              break;  
  } 
}

function printIFrame(p_objFrame)
{
  var l_objFrame = null;

  if(p_objFrame.name)
    l_objFrame = window.frames[p_objFrame.name];
  else
    l_objFrame = window.frames[p_objFrame];
  if(l_objFrame)
  {
    l_objFrame.focus();
    l_objFrame.print();
  }
  return false;
}

function popupDiv(p_strDivName, p_bDisabled)
{
  var l_objRet   = new Object();
  var l_strDiv   = strcat("div", p_strDivName);
  var l_strMask  = strcat(l_strDiv, "_Mask");
  var l_strInner = strcat(l_strDiv, "_InnerMask");

  if(p_bDisabled == null)
    p_bDisabled = false;
  l_objRet.window = document.getElementById(l_strDiv);
  if(!l_objRet.window)
  {
    l_objRet.window = document.createElement("DIV");
    l_objRet.window.name                  = l_strDiv;
    l_objRet.window.id                    = l_strDiv;
    l_objRet.window.className             = "popupwin";
    l_objRet.window.style.position        = "absolute";
    l_objRet.window.style.backgroundColor = "transparent";
    l_objRet.window.style.color           = "black";
    l_objRet.window.style.border          = "0px solid #777";
    l_objRet.window.style.display         = "none";
    document.body.appendChild(l_objRet.window);
  }
  l_objRet.mask = document.getElementById(l_strMask);
  if(!l_objRet.mask)
  {
    l_objRet.mask = document.createElement("DIV");
    l_objRet.mask.name                   = l_strMask;
    l_objRet.mask.id                     = l_strMask;
    l_objRet.mask.className              = "mask";
    l_objRet.mask.style.position         = "absolute";
    l_objRet.mask.style.top              = "0px";
    l_objRet.mask.style.left             = "0px";
    l_objRet.mask.style.width            = "100%";
    l_objRet.mask.style.height           = "100%";
    l_objRet.mask.style.opacity          = ".2";
    l_objRet.mask.style.backgroundColor  = "transparent";
    l_objRet.mask.style.backgroundImage  = "url(images/maskBG.png)";
    l_objRet.mask.style.backgroundRepeat = "repeat";
    l_objRet.mask.style.display          = "none";
    document.body.appendChild(l_objRet.mask);
  }
  if(!p_bDisabled)
  {
	l_objRet.innermask = null;
	return l_objRet;
  }
  l_objRet.innermask = document.getElementById(l_strInner);
  if(!l_objRet.innermask)
  {
    l_objRet.innermask = document.createElement("DIV");
    l_objRet.innermask.name                   = l_strInner;
    l_objRet.innermask.id                     = l_strInner;
    l_objRet.innermask.className              = "clearmask";
    //  l_objRet.innermask.style.opacity          = ".2";
    //  l_objRet.innermask.style.backgroundColor  = "transparent";
    //  l_objRet.innermask.style.backgroundImage  = "url(images/maskBG.png)";
    //  l_objRet.innermask.style.backgroundRepeat = "repeat";
    l_objRet.innermask.style.position         = "absolute";
    l_objRet.innermask.style.top              = "0px";
    l_objRet.innermask.style.left             = "0px";
    l_objRet.innermask.style.width            = "100%";
    l_objRet.innermask.style.height           = "100%";
    l_objRet.innermask.style.display          = "none";
    document.body.appendChild(l_objRet.innermask);
  }  
  return l_objRet;
}
 
function popupCode(p_strDivName, p_strTitle, p_strContent, p_objSize, p_bPrint, p_bNoMaximize)
{
  l_strDivName    = strcat("div", p_strDivName);
  l_strTitleEvent = strcat(" onmousedown='JavaScript:startDrag(event, this, \"", l_strDivName, "\");' onkeypress='JavaScript:onDivKeyPress(event, \"", p_strDivName, "\");'");
  l_strCloseEvent = strcat(" onClick='return hide_popup(\"",  p_strDivName, "\");'");
  l_strMaxEvent   = strcat(" onClick='return maximizeWin(\"", p_strDivName, "\");'");
  l_vecBuff       = [];

  if(p_bPrint == null)
    p_bPrint = false;
  l_vecBuff.push(strcat("<table id='tbl", p_strDivName, "' cellpadding='0' cellspacing='0' border='0' style='background-color: transparent; width: ", p_objSize.window.width, "px; height: ", p_objSize.window.height, "px; table-layout: fixed;'>"));
  l_vecBuff.push("<tr>");
  l_vecBuff.push(strcat("<td style='", g_objTheme.current.T.L.backgroundCSS(), "'", l_strTitleEvent, ">", g_objTheme.current.T.L.spacerHTML(), "</td>"));
  l_vecBuff.push(strcat("<td style='", g_objTheme.current.T.C.backgroundCSS(), "'", l_strTitleEvent, ">"));
  l_vecBuff.push(strcat("<table cellpadding='0' cellspacing='0' border='0' style='width: ", p_objSize.content.width, "px; height: ", g_objTheme.current.T.C.total.height, "px; table-layout: fixed;'>"));
  if(p_bPrint)
    l_vecBuff.push(strcat("<tr><td align=center style='width: 25px;'", l_strTitleEvent, "><a href=\"#\" onClick=\"return printIFrame('", l_strDivName ,"_Content');\"><img src='images/icons/icoMiniPrint.png' border=0", l_strTitleEvent, " alt=\"Print\" title=\"Print\"></a></td>"));
  else
    l_vecBuff.push(strcat("<tr><td align=center style='width: 25px;'", l_strTitleEvent, "><img src='images/icoApp.gif' border=0", l_strTitleEvent, "></td>"));
  l_vecBuff.push(strcat("<td id='td", p_strDivName, "' style='width: ", (p_objSize.title.width + 2), "px;'", l_strTitleEvent, ">"));
  l_vecBuff.push(strcat("<div id='", l_strDivName, "_Title' style='width: ", p_objSize.title.width, "px; height: ", p_objSize.title.height, "px; font: 13px Arial, Helvetica, san-serif; overflow: hidden; text-align: ", g_objTheme.current.title.align, ";'", l_strTitleEvent, ">", p_strTitle, "</div>"));
  l_vecBuff.push("</td>");
  l_vecBuff.push(strcat("<td align=right valign=top style='width: ", g_objTheme.current.btn.width, "px;'", l_strTitleEvent, ">"));
  l_vecBuff.push(strcat("<table cellpadding='0' cellspacing='0' border='0' style='height: ", g_objTheme.current.T.C.total.height, "px;'>"));
  l_vecBuff.push("<tr valign='top'>");
  if(!p_bNoMaximize)
    l_vecBuff.push(strcat("<td style='", g_objTheme.current.btn.max.normal.paddingCSS(), "'><a href='#'", l_strMaxEvent, "><img id='imgMax' src='", g_objTheme.current.btn.max.normal.src, "' border='0' onMouseOver='overBtn(this, true);' onMouseOut='overBtn(this, false);' alt='Maximize' title='Maximize Window'></a></td>"));
  l_vecBuff.push(strcat("<td style='", g_objTheme.current.btn.close.normal.paddingCSS(), "'><a href='#'", l_strCloseEvent, " style='padding: 0px;'><img id='imgClose' src='", g_objTheme.current.btn.close.normal.src, "' border='0' onMouseOver='overBtn(this, true);' onMouseOut='overBtn(this, false);' alt='Close' title='Close Window'></a></td>"));
  l_vecBuff.push("</tr>");
  l_vecBuff.push("</table>");
  l_vecBuff.push("</td>");
  l_vecBuff.push("</tr>");
  l_vecBuff.push("</table>");
  l_vecBuff.push("</td>");
  l_vecBuff.push(strcat("<td style='", g_objTheme.current.T.R.backgroundCSS(), "'", l_strTitleEvent, ">", g_objTheme.current.T.L.spacerHTML(), "</td>"));
  l_vecBuff.push("</tr>");
  l_vecBuff.push("<tr>");    
  if(g_objTheme.current.B)
  {
    l_vecBuff.push(strcat("<td style='", g_objTheme.current.C.L.backgroundCSS(), "'>", g_objTheme.current.C.L.spacerHTML(), "</td>"));
    l_vecBuff.push("<td style='background-color: #FFF;'>");
  }
  else
    l_vecBuff.push(strcat("<td colspan='3' style='border: ", g_objTheme.current.C.C.border.size, "px solid ", g_objTheme.current.C.C.border.color, "; padding: ", g_objTheme.current.C.C.padT, "px ", g_objTheme.current.C.C.padR, "px ", g_objTheme.current.C.C.padB, "px ", g_objTheme.current.C.C.padL, "px;'>"));
  l_vecBuff.push(p_strContent);  
  if(g_objTheme.current.B)
  {    
    l_vecBuff.push("</td>");
    l_vecBuff.push(strcat("<td style='", g_objTheme.current.C.R.backgroundCSS(), "'>", g_objTheme.current.C.R.spacerHTML(), "</td>"));
    l_vecBuff.push("</tr>");
    l_vecBuff.push("<tr>");
    l_vecBuff.push(strcat("<td style='", g_objTheme.current.B.L.backgroundCSS(), "'>", g_objTheme.current.B.L.spacerHTML(), "</td>"));
    l_vecBuff.push(strcat("<td style='", g_objTheme.current.B.C.backgroundCSS(), "'>", g_objTheme.current.B.C.spacerHTML(), "</td>"));
    l_vecBuff.push(strcat("<td style='", g_objTheme.current.B.R.backgroundCSS(), "'>", g_objTheme.current.B.R.spacerHTML(), "</td>"));
    l_vecBuff.push("</tr>");
  }
  else
    l_vecBuff.push("</td>");
  l_vecBuff.push("</tr>");
  l_vecBuff.push("</table>");
  return l_vecBuff.join("");
}

function show_popup(p_strDivName, p_strTitle, p_strContent, p_nWidth, p_nHeight, p_nX, p_nY, p_funcRet, p_strTheme, p_bDisabled, p_bMaximized, p_bNoMaximize)
{
  var l_objSize    = g_objTheme.set(p_strTheme, p_nWidth, p_nHeight);
  var l_strDivName = strcat("div" + p_strDivName);
  var l_strContent = strcat("<div id='", l_strDivName, "_Content' style='background-color: #FFF; border: 0px none #FFF; overflow: auto; width: ", l_objSize.content.width, "px; height: ", l_objSize.content.height, "px'>", p_strContent, "</div>");
  var l_objCenter  = g_objTheme.browser.center(l_objSize.window.width, l_objSize.window.height);
  var l_objDiv     = popupDiv(p_strDivName, p_bDisabled);

  g_vecPopUpDivs[p_strDivName] = l_objDiv;
  if(p_funcRet)
    g_mapFuncRet[p_strDivName] = p_funcRet;
  l_objCenter.x                 = ((p_nX) ? (p_nX) : (l_objCenter.x));
  l_objCenter.y                 = ((p_nY) ? (p_nY) : (l_objCenter.y));  
  g_nScrollLockX                = g_objTheme.browser.winScrollX();
  g_nScrollLockY                = g_objTheme.browser.winScrollY();
  l_objDiv.window.innerHTML     = popupCode(p_strDivName, p_strTitle, l_strContent, l_objSize, false, p_bNoMaximize);
  l_objDiv.mask.style.left      = strcat(g_nScrollLockX, "px");
  l_objDiv.mask.style.top       = strcat(g_nScrollLockY, "px");
  l_objDiv.mask.style.width     = strcat(g_objTheme.browser.winWidth(),  "px");
  l_objDiv.mask.style.height    = strcat(g_objTheme.browser.winHeight(), "px");
  l_objDiv.mask.style.zIndex    = 50;
  l_objDiv.mask.style.display   = "block";
  l_objDiv.window.style.left    = strcat((g_nScrollLockX + l_objCenter.x), "px");
  l_objDiv.window.style.top     = strcat((g_nScrollLockY + l_objCenter.y), "px");
  l_objDiv.window.style.width   = strcat(l_objSize.window.width,  "px");
  l_objDiv.window.style.height  = strcat(l_objSize.window.height, "px");
  l_objDiv.window.style.zIndex  = 51;
  l_objDiv.window.style.display = "block";
  if(l_objDiv.innermask)
  {
    l_objDiv.innermask.style.left     = strcat((g_nScrollLockX + l_objCenter.x + l_objSize.content.adjX), "px");
    l_objDiv.innermask.style.top      = strcat((g_nScrollLockY + l_objCenter.y + l_objSize.content.adjY), "px");
    l_objDiv.innermask.style.width    = strcat(l_objSize.content.width,  "px");
    l_objDiv.innermask.style.height   = strcat(l_objSize.content.height, "px");
    l_objDiv.innermask.style.zIndex   = 52;
    l_objDiv.innermask.style.display  = "block";
  }
  if(document.getElementById(strcat(l_strDivName, "_Title")))
    if(document.getElementById(strcat(l_strDivName, "_Title")).focus)
      document.getElementById(strcat(l_strDivName, "_Title")).focus();
  //disableTabIndexes();
  if(g_objTheme.browser.isIE() && g_objTheme.browser.version() < 7.0)
    hideSelectBoxes();
  g_bPopupIsShown = true;
  addEvent(document, 'keypress', keyDownHandler);
  addEvent(window,   'scroll',   onScrollHandler);
  if(p_bMaximized != null && (p_bMaximized == true || p_bMaximized != 0))
     maximizeWin(p_strDivName);
  return;
}

function show_popup_window(p_strDivName, p_strTitle, p_strPage, p_nWidth, p_nHeight, p_nX, p_nY, p_funcRet, p_strTheme, p_bDisabled, p_bMaximized, p_bNoMaximize)
{
  var l_objSize    = g_objTheme.set(p_strTheme, p_nWidth, p_nHeight);
  var l_strDivName = strcat("div", p_strDivName);
  var l_strContent = strcat("<iframe name='", l_strDivName, "_Content' id='", l_strDivName, "_Content' frameborder='0' width='", l_objSize.content.width, "' height='", l_objSize.content.height, "' style='background-color: #FFF; border: 0px none #FFF; overflow: auto; width: ", l_objSize.content.width, "px; height: ", l_objSize.content.height, "px' src='", p_strPage, "'><strong>Your Browser Does Not Support IFrames</strong></iframe>");
  var l_objCenter  = g_objTheme.browser.center(l_objSize.window.width, l_objSize.window.height);
  var l_objDiv     = popupDiv(p_strDivName, p_bDisabled);

  g_vecPopUpDivs[p_strDivName] = l_objDiv;
  if(p_funcRet)
    g_mapFuncRet[p_strDivName] = p_funcRet;
  l_objCenter.x                 = ((p_nX) ? (p_nX) : (l_objCenter.x));
  l_objCenter.y                 = ((p_nY) ? (p_nY) : (l_objCenter.y));  
  g_nScrollLockX                = g_objTheme.browser.winScrollX();
  g_nScrollLockY                = g_objTheme.browser.winScrollY();
  l_objDiv.window.innerHTML     = popupCode(p_strDivName, p_strTitle, l_strContent, l_objSize, false, p_bNoMaximize);
  l_objDiv.mask.style.left      = strcat(g_nScrollLockX, "px");
  l_objDiv.mask.style.top       = strcat(g_nScrollLockY, "px");
  l_objDiv.mask.style.width     = strcat(g_objTheme.browser.winWidth(),  "px");
  l_objDiv.mask.style.height    = strcat(g_objTheme.browser.winHeight(), "px");
  l_objDiv.mask.style.zIndex    = 50;
  l_objDiv.mask.style.display   = "block";
  l_objDiv.window.style.left    = strcat((g_nScrollLockX + l_objCenter.x), "px");
  l_objDiv.window.style.top     = strcat((g_nScrollLockY + l_objCenter.y), "px");
  l_objDiv.window.style.width   = strcat(l_objSize.window.width,  "px");
  l_objDiv.window.style.height  = strcat(l_objSize.window.height, "px");
  l_objDiv.window.style.zIndex  = 51;
  l_objDiv.window.style.display = "block";
  if(l_objDiv.innermask)
  {
    l_objDiv.innermask.style.left     = strcat((g_nScrollLockX + l_objCenter.x + l_objSize.content.adjX), "px");
    l_objDiv.innermask.style.top      = strcat((g_nScrollLockY + l_objCenter.y + l_objSize.content.adjY), "px");
    l_objDiv.innermask.style.width    = strcat(l_objSize.content.width,  "px");
    l_objDiv.innermask.style.height   = strcat(l_objSize.content.height, "px");
    l_objDiv.innermask.style.zIndex   = 52;
    l_objDiv.innermask.style.display  = "block";
  }
  if(document.getElementById(strcat(l_strDivName, "_Title")))
    if(document.getElementById(strcat(l_strDivName, "_Title")).focus)
      document.getElementById(strcat(l_strDivName, "_Title")).focus();
  //disableTabIndexes();
  if(g_objTheme.browser.isIE() && g_objTheme.browser.version() < 7.0)
    hideSelectBoxes();
  g_bPopupIsShown = true;
  addEvent(document, 'keypress', keyDownHandler);
  addEvent(window,   'scroll',   onScrollHandler);
  if(p_bMaximized != null && (p_bMaximized == true || p_bMaximized != 0))
     maximizeWin(p_strDivName);
  return;
}

function print_preview(p_strDivName, p_strContent, p_nWidth, p_nHeight, p_nX, p_nY, p_vecLinkDocs, p_strTheme, p_bDisabled, p_bMaximized, p_bNoMaximize, p_bNoAutoPrint)
{
  var l_objSize    = g_objTheme.set(p_strTheme, p_nWidth, p_nHeight);
  var l_strDivName = strcat("div", p_strDivName);
  var l_strContent = strcat("<iframe name='", l_strDivName, "_Content' id='", l_strDivName, "_Content' frameborder='0' width='", l_objSize.content.width, "' height='", l_objSize.content.height, "' style='background-color: #FFF; border: 0px none #FFF; overflow: auto; width: ", l_objSize.content.width, "px; height: ", l_objSize.content.height, "px' src=''><strong>Your Browser Does Not Support IFrames</strong></iframe>");
  var l_objCenter  = g_objTheme.browser.center(l_objSize.window.width, l_objSize.window.height);
  var l_objDiv     = popupDiv(p_strDivName, p_bDisabled);

  g_vecPopUpDivs[p_strDivName] = l_objDiv;
  l_objCenter.x                = ((p_nX) ? (p_nX) : (l_objCenter.x));
  l_objCenter.y                = ((p_nY) ? (p_nY) : (l_objCenter.y));  
  g_nScrollLockX               = g_objTheme.browser.winScrollX();
  g_nScrollLockY               = g_objTheme.browser.winScrollY();
  l_objDiv.window.innerHTML    = popupCode(p_strDivName, "Print Preview", l_strContent, l_objSize, true, p_bNoMaximize);
  l_objContent = document.getElementById(strcat(l_strDivName, "_Content"));
  if(l_objContent)
    if(!(l_objDocument = l_objContent.contentDocument))
      l_objDocument = l_objContent.contentWindow.document;
  if(l_objDocument)
  {
    l_objDocument.open();
    l_objDocument.write("<html>\n");
    l_objDocument.write("<head>\n");
    l_objDocument.write("<title>Print Preview</title>\n");
    if(p_vecLinkDocs && p_vecLinkDocs.length > 0)
    {
      for(l_nIdx = 0; l_nIdx < p_vecLinkDocs.length; ++l_nIdx)
      {
        l_strItm = p_vecLinkDocs[l_nIdx];
        if(!l_strItm || l_strItm.length < 3)
          continue;
        if((l_strExt = file_ext(l_strItm).toLowerCase()) == "js")
          l_objDocument.write(strcat("<script language='JavaScript' type='text/javascript' src='", l_strItm, "'></script>\n"));
        else if(l_strExt == "css")
          l_objDocument.write(strcat("<link href='", l_strItm, "' rel='stylesheet' type='text/css'>\n"));
      }
    }
    l_objDocument.write("</head>\n");
    l_objDocument.write("<body>\n");
    l_objDocument.write(p_strContent);
    l_objDocument.write("</body>\n");
    l_objDocument.write("</html>\n");
    l_objDocument.close();
    l_objContent.domain = document.domain;
  }
  l_objDiv.mask.style.left    = strcat(g_nScrollLockX, "px");
  l_objDiv.mask.style.top     = strcat(g_nScrollLockY, "px");
  l_objDiv.mask.style.width   = strcat(g_objTheme.browser.winWidth(),  "px");
  l_objDiv.mask.style.height  = strcat(g_objTheme.browser.winHeight(), "px");
  l_objDiv.mask.style.zIndex  = 50;
  l_objDiv.mask.style.display = "block";
  l_objDiv.window.style.left     = strcat((g_nScrollLockX + l_objCenter.x), "px");
  l_objDiv.window.style.top      = strcat((g_nScrollLockY + l_objCenter.y), "px");
  l_objDiv.window.style.width    = strcat(l_objSize.window.width,  "px");
  l_objDiv.window.style.height   = strcat(l_objSize.window.height, "px");
  l_objDiv.window.style.zIndex   = 51;
  l_objDiv.window.style.display  = "block";
  if(l_objDiv.innermask)
  {
    l_objDiv.innermask.style.left     = strcat((g_nScrollLockX + l_objCenter.x + l_objSize.content.adjX), "px");
    l_objDiv.innermask.style.top      = strcat((g_nScrollLockY + l_objCenter.y + l_objSize.content.adjY), "px");
    l_objDiv.innermask.style.width    = strcat(l_objSize.content.width,  "px");
    l_objDiv.innermask.style.height   = strcat(l_objSize.content.height, "px");
    l_objDiv.innermask.style.zIndex   = 52;
    l_objDiv.innermask.style.display  = "block";
  }
  //disableTabIndexes();
  if(g_objTheme.browser.isIE() && g_objTheme.browser.version() < 7.0)
    hideSelectBoxes();
  g_bPopupIsShown = true;
  /*
  if(l_objDocument && l_objContent && !p_bNoAutoPrint)
  {
    if(g_objTheme.browser.typename() == "Chrome" || g_objTheme.browser.typename() == "Safari")
      setTimeout(strcat("printIFrame('", l_strDivName, "_Content')"), 500)
    else
      printIFrame(l_objContent);
  }*/
  addEvent(document, 'keypress', keyDownHandler);
  addEvent(window,   'scroll',   onScrollHandler);
  if(p_bMaximized != null && (p_bMaximized == true || p_bMaximized != 0))
     maximizeWin(p_strDivName);
  return;
}

function nextpage_popup_window(p_strDivName)
{
  var l_objWinFrame = document.getElementById(strcat("div", p_strDivName, "_Content"));

  if(l_objWinFrame && l_objWinFrame.history)
  {
    if(l_objWinFrame.history.go)
      l_objWinFrame.history.go(+1);
    else if(l_objWinFrame.forward)
      l_objWinFrame.history.forward();
  } 
  return;
}

function prevpage_popup_window(p_strDivName)
{
  var l_objWinFrame = document.getElementById(strcat("div", p_strDivName, "_Content"));

  if(l_objWinFrame && l_objWinFrame.history)
  {
    if(l_objWinFrame.history.go)
      l_objWinFrame.history.go(-1);
    else if(l_objWinFrame.back)
      l_objWinFrame.history.back();
  }
  return;
}

function hide_popup(p_strDivName)
{
  var l_objDiv = g_vecPopUpDivs[p_strDivName];
  
  if(!l_objDiv)
    l_objDiv = popupDiv(p_strDivName);
  l_objDiv.window.style.display  = "none";  
  l_objDiv.window.style.zIndex   = -51;
  if(l_objDiv.innermask)
  {
	l_objDiv.innermask.style.display = "none";
	l_objDiv.innermask.style.zIndex  = -52;
  }
  l_objDiv.mask.style.display = "none";  
  l_objDiv.mask.style.zIndex  = -50;
  //restoreTabIndexes();
  if(g_objTheme.browser.isIE() && g_objTheme.browser.version() < 7.0)
    displaySelectBoxes();
  removeEvent(document, 'keypress', keyDownHandler);
  removeEvent(window,   'scroll',   onScrollHandler);
  if(g_mapFuncRet[p_strDivName])
    g_mapFuncRet[p_strDivName]();
  g_bPopupIsShown = false;
  g_vecPopUpDivs[p_strDivName] = l_objDiv = null;  
  return false;
}

function show_status(p_strDivName, p_vecStatus, p_strMsgClass, p_nHeight, p_nWidth)
{
  var l_strDivName = strcat("div", p_strDivName);
  var l_objCenter  = g_objTheme.browser.center(p_nWidth, p_nHeight);
  var l_objDiv     = popupDiv(p_strDivName);
  var l_nTop       = ((g_objTheme.browser.isIE()) ? 3 : 7);

  g_nScrollLockX                = g_objTheme.browser.winScrollX();
  g_nScrollLockY                = g_objTheme.browser.winScrollY();
  l_objDiv.window.innerHTML     = strcat("<table cellpadding='0' cellspacing='0' border='0' class='popupwin' style='width: ", p_nWidth, "px; height: ", p_nHeight, "px'><tr><td class='pagecontent'><div class='content' id='", l_strDivName, "_Content' style='position: relative; top: ", l_nTop, "; height: ", (p_nHeight - l_nTop), "px'></div></td></tr></table>");
  l_objDiv.mask.style.left      = strcat(g_nScrollLockX, "px");
  l_objDiv.mask.style.top       = strcat(g_nScrollLockY, "px");
  l_objDiv.mask.style.width     = strcat(g_objTheme.browser.winWidth(),  "px");
  l_objDiv.mask.style.height    = strcat(g_objTheme.browser.winHeight(), "px");
  l_objDiv.mask.style.zIndex    = 50;
  l_objDiv.mask.style.display   = "block";
  l_objDiv.window.style.left    = strcat((g_nScrollLockX + l_objCenter.x), "px");
  l_objDiv.window.style.top     = strcat((g_nScrollLockY + l_objCenter.y), "px");
  l_objDiv.window.style.width   = strcat(p_nWidth,  "px");
  l_objDiv.window.style.height  = strcat(p_nHeight, "px");
  l_objDiv.window.style.zIndex  = 51;
  l_objDiv.window.style.display = "block";
  //disableTabIndexes();
  if(g_objTheme.browser.isIE() && g_objTheme.browser.version() < 7.0)
    hideSelectBoxes();
  g_bPopupIsShown = true;
  addEvent(document, 'keypress', keyDownHandler);
  addEvent(window,   'scroll',   onScrollHandler);
  g_objStatMsg = new Status_Message(strcat(l_strDivName, "_Content"), p_vecStatus, p_strMsgClass);
  g_objStatMsg.start(200, "g_objStatMsg");
}

function hide_status(p_strDivName)
{
  var l_objDiv     = popupDiv(p_strDivName);

  if(g_objStatMsg && g_objStatMsg != null)
    g_objStatMsg.stop("");
  g_objStatMsg = null;
  l_objDiv.window.style.display = "none";
  l_objDiv.window.style.zIndex  = -51;
  l_objDiv.mask.style.display   = "none";
  l_objDiv.mask.style.zIndex    = -50;
  //restoreTabIndexes();
  if(g_objTheme.browser.isIE() && g_objTheme.browser.version() < 7.0)
    displaySelectBoxes();
  removeEvent(document, 'keypress', keyDownHandler);
  removeEvent(window,   'scroll',   onScrollHandler);
  if(g_mapFuncRet[p_strDivName])
    g_mapFuncRet[p_strDivName]();
  g_bPopupIsShown = false;
  return;
}

// Date Functions
function getLastDay(p_nMonth, p_nYear)
{
  var l_nYear   = ((p_nMonth >= 12) ? (p_nYear + 1) : p_nYear);
  var l_nMonth  = ((p_nMonth >= 12) ? (0) : p_nMonth);
  var l_objDate = new Date(l_nYear, l_nMonth, 1);

  l_objDate.setDate(l_objDate.getDate() - 1);
  return (l_objDate.getDate());
}

function changeDateFlds(p_strMonthID, p_strDayID, p_strYearID)
{
  var l_objMonth = document.getElementById(p_strMonthID);
  var l_objDay   = document.getElementById(p_strDayID);
  var l_objYear  = document.getElementById(p_strYearID);
  var l_strPad   = "";
  var l_strVal   = "";
  var l_nSelIdx  = -1;
  var l_nOffset  = 0;
  var l_nDays    = 0;

  if(!l_objMonth || !l_objDay || !l_objYear)
    return;     
  if(!l_objMonth.options || !l_objDay.options || !l_objYear.options)
    return;
  if(!l_objMonth.value || l_objMonth.value == '' || !l_objYear.value || l_objYear.value == '')
    return;
  l_nDays = getLastDay(l_objMonth.value, l_objYear.value);
  l_nSelIdx = l_objDay.selectedIndex;
  if(l_objDay.options.length < 28)
  {
    l_objDay.options.length = 0;
    if(l_objMonth.options.length > 0 && l_objMonth.options[0].value == '')
    {
      if(l_objMonth.options.length > 1 && l_objMonth.options[1].value.charAt(0) == '0')
        l_strPad = "0";
      l_objDay.options[l_objDay.options.length] = new Option("Day", "");
    }
    else if(l_objMonth.options.length > 0 && l_objMonth.options[0].value.charAt(0) == '0')
      l_strPad = "0";
    for(l_nIdx = 1; l_nIdx <= l_nDays; l_nIdx++)
    {
      l_strVal = l_nIdx + "";
      if(l_strPad != "" && l_strVal.length < 2)
      {
        var l_vecBuf = [];
  
        l_vecBuf.push(l_strPad);
        l_vecBuf.push(l_strVal);
        l_strVal = l_vecBuf.join('');
      }
      l_objDay.options[l_objDay.options.length] = new Option(l_strVal, l_strVal);
    }
  }
  if(l_objDay.options.length > 0 && l_objDay.options[0].value == '')
    l_nOffset = 1;
  if(l_objDay.options.length > l_nDays + l_nOffset)
    l_objDay.options.length = l_nDays + l_nOffset;
  else
  {
    for(l_nIdx = l_objDay.options.length; l_nIdx < l_nDays + l_nOffset; l_nIdx++)
    {
      l_strVal = (((l_nOffset == 1) ? l_nIdx : (l_nIdx + 1)) + "");
      l_objDay.options[l_objDay.options.length] = new Option(l_strVal, l_strVal);
    }
  }
  l_objDay.selectedIndex = ((l_nSelIdx >= l_objDay.options.length) ? (l_objDay.options.length - 1) : (l_nSelIdx));
  if(l_objDay.selectedIndex == -1 && l_objDay.options.length > 0)
    l_objDay.selectedIndex = 0;
  return;
}

// COMMON EDITOR GENERATED FUNCTIONS

function MM_nbGroup(event, grpName) { //v6.0
  var i,img,nbArr,args=MM_nbGroup.arguments;
  if (event == "init" && args.length > 2) {
    if ((img = MM_findObj(args[2])) != null && !img.MM_init) {
      img.MM_init = true; img.MM_up = args[3]; img.MM_dn = img.src;
      if ((nbArr = document[grpName]) == null) nbArr = document[grpName] = new Array();
      nbArr[nbArr.length] = img;
      for (i=4; i < args.length-1; i+=2) if ((img = MM_findObj(args[i])) != null) {
        if (!img.MM_up) img.MM_up = img.src;
        img.src = img.MM_dn = args[i+1];
        nbArr[nbArr.length] = img;
    } }
  } else if (event == "over") {
    document.MM_nbOver = nbArr = new Array();
    for (i=1; i < args.length-1; i+=3) if ((img = MM_findObj(args[i])) != null) {
      if (!img.MM_up) img.MM_up = img.src;
      img.src = (img.MM_dn && args[i+2]) ? args[i+2] : ((args[i+1])? args[i+1] : img.MM_up);
      nbArr[nbArr.length] = img;
    }
  } else if (event == "out" ) {
    for (i=0; i < document.MM_nbOver.length; i++) {
      img = document.MM_nbOver[i]; img.src = (img.MM_dn) ? img.MM_dn : img.MM_up; }
  } else if (event == "down") {
    nbArr = document[grpName];
    if (nbArr)
      for (i=0; i < nbArr.length; i++) { img=nbArr[i]; img.src = img.MM_up; img.MM_dn = 0; }
    document[grpName] = nbArr = new Array();
    for (i=2; i < args.length-1; i+=2) if ((img = MM_findObj(args[i])) != null) {
      if (!img.MM_up) img.MM_up = img.src;
      img.src = img.MM_dn = (args[i+1])? args[i+1] : img.MM_up;
      nbArr[nbArr.length] = img;
  } }
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
