// v.2.5 build 090904

/*
Copyright DHTMLX LTD. http : // www.dhtmlx.com
You allowed to use this component or parts of it under GPL terms
To use it on other terms or get Professional edition of the component please contact us at sales@dhtmlx.com
 */

function dhtmlXGridCellObject(obj)
{
   this.destructor = function()
   {
      this.cell.obj = null;
      this.cell = null;
      this.grid = null;
      this.base = null;
      return null
   }
   ;
   this.cell = obj;
   this.getValue = function()
   {
      if ((this.cell.firstChild) && (this.cell.firstChild.tagName == "TEXTAREA"))
      return this.cell.firstChild.value;
      else
      return this.cell.innerHTML._dhx_trim()
   }
   ;
   this.getMathValue = function()
   {
      if (this.cell._val)return this.cell._val;
      else
      return this.getValue()
   }
   ;
   this.getFont = function()
   {
      arOut = new Array(3);
      if (this.cell.style.fontFamily)arOut[0] = this.cell.style.fontFamily

      if (this.cell.style.fontWeight == 'bold' || this.cell.parentNode.style.fontWeight == 'bold')arOut[1] = 'bold';
      if (this.cell.style.fontStyle == 'italic' || this.cell.parentNode.style.fontWeight == 'italic')arOut[1] += 'italic';
      if (this.cell.style.fontSize)arOut[2] = this.cell.style.fontSize
      else
      arOut[2] = "";
      return arOut.join("-")
   }
   ;
   this.getTextColor = function()
   {
      if (this.cell.style.color)return this.cell.style.color
      else
      return "#000000"
   }
   ;
   this.getBgColor = function()
   {
      if (this.cell.bgColor)return this.cell.bgColor
      else
      return "#FFFFFF"
   }
   ;
   this.getHorAlign = function()
   {
      if (this.cell.style.textAlign)return this.cell.style.textAlign;
      else if (this.cell.style.textAlign)return this.cell.style.textAlign;
      else
      return "left"
   }
   ;
   this.getWidth = function()
   {
      return this.cell.scrollWidth
   }
   ;
   this.setFont = function(val)
   {
      fntAr = val.split("-");
      this.cell.style.fontFamily = fntAr[0];
      this.cell.style.fontSize = fntAr[fntAr.length - 1]

      if (fntAr.length == 3)
      {
         if (/bold/.test(fntAr[1]))
         this.cell.style.fontWeight = "bold";
         if (/italic/.test(fntAr[1]))
         this.cell.style.fontStyle = "italic";
         if (/underline/.test(fntAr[1]))
         this.cell.style.textDecoration = "underline"
      }
   }
   ;
   this.setTextColor = function(val)
   {
      this.cell.style.color = val
   }
   ;
   this.setBgColor = function(val)
   {
      if (val == "")val = null;
      this.cell.bgColor = val
   }
   ;
   this.setHorAlign = function(val)
   {
      if (val.length == 1)
      {
         if (val == 'c')this.cell.style.textAlign = 'center'

         else if (val == 'l')this.cell.style.textAlign = 'left';
         else
         this.cell.style.textAlign = 'right'
      }
      else
      this.cell.style.textAlign = val
   }
   ;
   this.wasChanged = function()
   {
      if (this.cell.wasChanged)return true;
      else
      return false
   }
   ;
   this.isCheckbox = function()
   {
      var ch = this.cell.firstChild;
      if (ch && ch.tagName == 'INPUT')
      {
         type = ch.type;
         if (type == 'radio' || type == 'checkbox')return true;
         else
         return false
      }
      else
      return false
   }
   ;
   this.isChecked = function()
   {
      if (this.isCheckbox())
      {
         return this.cell.firstChild.checked
      }
   }
   ;
   this.isDisabled = function()
   {
      return this.cell._disabled
   }
   ;
   this.setChecked = function(fl)
   {
      if (this.isCheckbox())
      {
         if (fl != 'true' && fl != 1)fl = false;
         this.cell.firstChild.checked = fl
      }
   }
   ;
   this.setDisabled = function(fl)
   {
      if (fl != 'true' && fl != 1)fl = false;
      if (this.isCheckbox())
      {
         this.cell.firstChild.disabled = fl;
         if (this.disabledF)this.disabledF(fl)
      }
      ;
      this.cell._disabled = fl
   }
}
;
dhtmlXGridCellObject.prototype =
{
   getAttribute : function(name)
   {
      return this.cell._attrs[name]
   }
   ,
   setAttribute : function(name, value)
   {
      this.cell._attrs[name] = value
   }
   ,
   getInput : function()
   {
      if (this.obj && (this.obj.tagName == "INPUT" || this.obj.tagName == "TEXTAREA")) return this.obj;
      var inps = (this.obj || this.cell).getElementsByTagName("TEXTAREA");
      if ( ! inps.length)inps = (this.obj || this.cell).getElementsByTagName("INPUT");
      return inps[0]
   }
}
;
dhtmlXGridCellObject.prototype.setValue = function(val)
{
   if (( typeof (val) != "number") && ( ! val || val.toString()._dhx_trim() == ""))
   {
      val = "&nbsp;"
      this.cell._clearCell = true
   }
   else
   this.cell._clearCell = false;
   this.setCValue(val)
}
;
dhtmlXGridCellObject.prototype.getTitle = function()
{
   return (_isIE ? this.cell.innerText : this.cell.textContent)
}
;
dhtmlXGridCellObject.prototype.setCValue = function(val, val2)
{
   this.cell.innerHTML = val
}
;
dhtmlXGridCellObject.prototype.setCTxtValue = function(val)
{
   this.cell.innerHTML = "";
   this.cell.appendChild(document.createTextNode(val))
}
;
dhtmlXGridCellObject.prototype.setLabel = function(val)
{
   this.cell.innerHTML = val
}
;
dhtmlXGridCellObject.prototype.getMath = function()
{
   if (this._val)return this.val;
   else
   return this.getValue()
}
;
function eXcell()
{
   this.obj = null;
   this.val = null;
   this.changeState = function()
   {
      return false
   }
   ;
   this.edit = function()
   {
      this.val = this.getValue()
   }
   ;
   this.detach = function()
   {
      return false
   }
   ;
   this.getPosition = function(oNode)
   {
      var oCurrentNode = oNode;
      var iLeft = 0;
      var iTop = 0;
      while (oCurrentNode.tagName != "BODY")
      {
         iLeft += oCurrentNode.offsetLeft;
         iTop += oCurrentNode.offsetTop;
         oCurrentNode = oCurrentNode.offsetParent
      }
      ;
      return new Array(iLeft, iTop)
   }
}
;
eXcell.prototype = new dhtmlXGridCellObject;
function eXcell_ed(cell)
{
   if (cell)
   {
      this.cell = cell;
      this.grid = this.cell.parentNode.grid
   }
   ;
   this.edit = function()
   {
      this.cell.atag = (( ! this.grid.multiLine) && (_isKHTML || _isMacOS || _isFF)) ? "INPUT" : "TEXTAREA";
      this.val = this.getValue();
      this.obj = document.createElement(this.cell.atag);
      this.obj.setAttribute("autocomplete", "off");
      this.obj.style.height = (this.cell.offsetHeight - (_isIE ? 4 : 4)) + "px";
      this.obj.className = "dhx_combo_edit";
      this.obj.wrap = "soft";
      this.obj.style.textAlign = this.cell.style.textAlign;
      this.obj.onclick = function(e)
      {
         (e || event).cancelBubble = true
      }
      ;
      this.obj.onmousedown = function(e)
      {
         (e || event).cancelBubble = true
      }
      ;
      this.obj.value = this.val
      this.cell.innerHTML = "";
      this.cell.appendChild(this.obj);
      if (_isFF)
      {
         this.obj.style.overflow = "visible";
         if ((this.grid.multiLine) && (this.obj.offsetHeight >= 18) && (this.obj.offsetHeight < 40))
         {
            this.obj.style.height = "36px";
            this.obj.style.overflow = "scroll"
         }
      }
      ;
      this.obj.onselectstart = function(e)
      {
         if ( ! e)e = event;
         e.cancelBubble = true;
         return true
      }
      ;
      if (_isIE)this.obj.focus();
      this.obj.focus()
   }
   ;
   this.getValue = function()
   {
      if ((this.cell.firstChild) && ((this.cell.atag) && (this.cell.firstChild.tagName == this.cell.atag)))
      return this.cell.firstChild.value;
      if (this.cell._clearCell)return "";
      return this.cell.innerHTML.toString()._dhx_trim()
   }
   ;
   this.detach = function()
   {
      this.setValue(this.obj.value);
      return this.val != this.getValue()
   }
}
;
eXcell_ed.prototype = new eXcell;
function eXcell_edtxt(cell)
{
   if (cell)
   {
      this.cell = cell;
      this.grid = this.cell.parentNode.grid
   }
   ;
   this.getValue = function()
   {
      if ((this.cell.firstChild) && ((this.cell.atag) && (this.cell.firstChild.tagName == this.cell.atag)))
      return this.cell.firstChild.value;
      if (this.cell._clearCell)return "";
      return (_isIE ? this.cell.innerText : this.cell.textContent)
   }
   ;
   this.setValue = function(val)
   {
      if ( ! val || val.toString()._dhx_trim() == "")
      {
         val = " ";
         this.cell._clearCell = true
      }
      else
      this.cell._clearCell = false;
      this.setCTxtValue(val)
   }
}
;
eXcell_edtxt.prototype = new eXcell_ed;
function eXcell_ch(cell)
{
   if (cell)
   {
      this.cell = cell;
      this.grid = this.cell.parentNode.grid;
      this.cell.obj = this
   }
   ;
   this.disabledF = function(fl)
   {
      if ((fl == true) || (fl == 1))
      this.cell.innerHTML = this.cell.innerHTML.replace("item_chk0.", "item_chk0_dis.").replace("item_chk1.",
      "item_chk1_dis.");
      else
      this.cell.innerHTML = this.cell.innerHTML.replace("item_chk0_dis.", "item_chk0.").replace("item_chk1_dis.",
      "item_chk1.")
   }
   ;
   this.changeState = function()
   {
      if (( ! this.grid.isEditable) || (this.cell.parentNode._locked) || (this.isDisabled()))
      return;
      if (this.grid.callEvent("onEditCell", [
      0,
      this.cell.parentNode.idd,
      this.cell._cellIndex
      ]))
      {
         this.val = this.getValue()

         if (this.val == "1")this.setValue("0")
         else
         this.setValue("1")

         this.cell.wasChanged = true;
         this.grid.callEvent("onEditCell", [
         1,
         this.cell.parentNode.idd,
         this.cell._cellIndex
         ]);
         this.grid.callEvent("onCheckbox", [
         this.cell.parentNode.idd,
         this.cell._cellIndex,
         (this.val != '1')
         ]);
         this.grid.callEvent("onCheck", [
         this.cell.parentNode.idd,
         this.cell._cellIndex,
         (this.val != '1')
         ])
      }
      else
      {
         this.editor = null
      }
   }
   ;
   this.getValue = function()
   {
      return this.cell.chstate ? this.cell.chstate.toString() : "0"
   }
   ;
   this.isCheckbox = function()
   {
      return true
   }
   ;
   this.isChecked = function()
   {
      if (this.getValue() == "1")
      return true;
      else
      return false
   }
   ;
   this.setChecked = function(fl)
   {
      this.setValue(fl.toString())
   }
   ;
   this.detach = function()
   {
      return this.val != this.getValue()
   }
   ;
   this.edit = null
}
;
eXcell_ch.prototype = new eXcell;
eXcell_ch.prototype.setValue = function(val)
{
   this.cell.style.verticalAlign = "middle";
   if (val)
   {
      val = val.toString()._dhx_trim();
      if ((val == "false") || (val == "0"))
      val = ""
   }
   ;
   if (val)
   {
      val = "1";
      this.cell.chstate = "1"
   }
   else
   {
      val = "0";
      this.cell.chstate = "0"
   }
   ;
   var obj = this;
   this.setCValue("<img src='"+this.grid.imgURL+"item_chk"+val
   + ".gif' onclick='new eXcell_ch(this.parentNode).changeState();(arguments[0]||event).cancelBubble=true;'>",
   this.cell.chstate)
}
;
function eXcell_ra(cell)
{
   this.base = eXcell_ch;
   this.base(cell)
   this.grid = cell.parentNode.grid;
   this.disabledF = function(fl)
   {
      if ((fl == true) || (fl == 1))
      this.cell.innerHTML = this.cell.innerHTML.replace("radio_chk0.", "radio_chk0_dis.").replace("radio_chk1.",
      "radio_chk1_dis.");
      else
      this.cell.innerHTML = this.cell.innerHTML.replace("radio_chk0_dis.", "radio_chk0.").replace("radio_chk1_dis.",
      "radio_chk1.")
   }
   ;
   this.changeState = function(mode)
   {
      if (mode === false && this.getValue() == 1) return;
      if (( ! this.grid.isEditable) || (this.cell.parentNode._locked))
      return;
      if (this.grid.callEvent("onEditCell", [
      0,
      this.cell.parentNode.idd,
      this.cell._cellIndex
      ]) != false)
      {
         this.val = this.getValue()

         if (this.val == "1")this.setValue("0")
         else
         this.setValue("1")
         this.cell.wasChanged = true;
         this.grid.callEvent("onEditCell", [
         1,
         this.cell.parentNode.idd,
         this.cell._cellIndex
         ]);
         this.grid.callEvent("onCheckbox", [
         this.cell.parentNode.idd,
         this.cell._cellIndex,
         (this.val != '1')
         ]);
         this.grid.callEvent("onCheck", [
         this.cell.parentNode.idd,
         this.cell._cellIndex,
         (this.val != '1')
         ])
      }
      else
      {
         this.editor = null
      }
   }
   ;
   this.edit = null
}
;
eXcell_ra.prototype = new eXcell_ch;
eXcell_ra.prototype.setValue = function(val)
{
   this.cell.style.verticalAlign = "middle";
   if (val)
   {
      val = val.toString()._dhx_trim();
      if ((val == "false") || (val == "0"))
      val = ""
   }
   ;
   if (val)
   {
      if ( ! this.grid._RaSeCol)this.grid._RaSeCol = [];
      if (this.grid._RaSeCol[this.cell._cellIndex])
      {
         var z = this.grid.cells4(this.grid._RaSeCol[this.cell._cellIndex]);
         z.setValue("0")
         if (this.grid.rowsAr[z.cell.parentNode.idd])this.grid.callEvent("onEditCell", [
         1,
         z.cell.parentNode.idd,
         z.cell._cellIndex
         ])
      }
      ;
      this.grid._RaSeCol[this.cell._cellIndex] = this.cell;
      val = "1";
      this.cell.chstate = "1"
   }
   else
   {
      val = "0";
      this.cell.chstate = "0"
   }
   ;
   this.setCValue("<img src='"+this.grid.imgURL+"radio_chk"+val+".gif' onclick='new eXcell_ra(this.parentNode).changeState(false);'>",
   this.cell.chstate)
}
;
function eXcell_txt(cell)
{
   if (cell)
   {
      this.cell = cell;
      this.grid = this.cell.parentNode.grid
   }
   ;
   this.edit = function()
   {
      this.val = this.getValue()
      this.obj = document.createElement("TEXTAREA");
      this.obj.className = "dhx_textarea";
      this.obj.onclick = function(e)
      {
         (e || event).cancelBubble = true
      }
      ;
      var arPos = this.grid.getPosition(this.cell);
      if ( ! this.cell._clearCell)this.obj.value = this.val;
      this.obj.style.display = "";
      this.obj.style.textAlign = this.cell.style.textAlign;
      if (_isFF)
      {
         var z_ff = document.createElement("DIV");
         z_ff.appendChild(this.obj);
         z_ff.style.overflow = "auto";
         z_ff.className = "dhx_textarea";
         this.obj.style.margin = "0px 0px 0px 0px";
         this.obj.style.border = "0px";
         this.obj = z_ff
      }
      ;
      document.body.appendChild(this.obj);
      if(_isOpera)this.obj.onkeypress = function(ev)
      {
         if (ev.keyCode == 9)return false
      }
      ;
      this.obj.onkeydown = function(e)
      {
         var ev = (e || event);
         if (ev.keyCode == 9)
         {
            globalActiveDHTMLGridObject.entBox.focus();
            globalActiveDHTMLGridObject.doKey(
            {
               keyCode : ev.keyCode,
               shiftKey : ev.shiftKey,
               srcElement : "0"
            }
            );
            return false
         }
      }
      ;
      this.obj.style.left = arPos[0] + "px";
      this.obj.style.top = arPos[1] + this.cell.offsetHeight + "px";
      if (this.cell.offsetWidth < 200)var pw = 200;
      else
      var pw = this.cell.offsetWidth;
      this.obj.style.width = pw + (_isFF ? 18 : 16) + "px"

      if (_isFF)
      {
         this.obj.firstChild.style.width = parseInt(this.obj.style.width) + "px";
         this.obj.firstChild.style.height = this.obj.offsetHeight - 3 + "px"
      }
      ;
      if (_isIE)
      {
         this.obj.select();
         this.obj.value = this.obj.value
      }
      ;
      if (_isFF)this.obj.firstChild.focus();
      else
      {
         this.obj.focus()
      }
   }
   ;
   this.detach = function()
   {
      var a_val = "";
      if (_isFF)a_val = this.obj.firstChild.value;
      else
      a_val = this.obj.value;
      if (a_val == "")
      {
         this.cell._clearCell = true
      }
      else
      this.cell._clearCell = false;
      this.setValue(a_val);
      document.body.removeChild(this.obj);
      this.obj = null;
      return this.val != this.getValue()
   }
   ;
   this.getValue = function()
   {
      if (this.obj)
      {
         if (_isFF)return this.obj.firstChild.value;
         else
         return this.obj.value
      }
      ;
      if (this.cell._clearCell)return "";
      if (( ! this.grid.multiLine))
      return this.cell._brval || this.cell.innerHTML;
      else
      return this.cell.innerHTML.replace(/<br[^>]*>/gi, "\n")._dhx_trim()
   }
}
;
eXcell_txt.prototype = new eXcell;
function eXcell_txttxt(cell)
{
   if (cell)
   {
      this.cell = cell;
      this.grid = this.cell.parentNode.grid
   }
   ;
   this.getValue = function()
   {
      if ((this.cell.firstChild) && (this.cell.firstChild.tagName == "TEXTAREA"))
      return this.cell.firstChild.value;
      if (this.cell._clearCell)return "";
      if (( ! this.grid.multiLine) && this.cell._brval)
      return this.cell._brval;
      return (_isIE ? this.cell.innerText : this.cell.textContent)
   }
   ;
   this.setValue = function(val)
   {
      this.cell._brval = val;
      if ( ! val || val.toString()._dhx_trim() == "")
      val = " ";
      this.setCTxtValue(val)
   }
}
;
eXcell_txttxt.prototype = new eXcell_txt;
eXcell_txt.prototype.setValue = function(val)
{
   if ( ! val || val.toString()._dhx_trim() == "")
   {
      val = "&nbsp;"
      this.cell._clearCell = true
   }
   else
   this.cell._clearCell = false;
   this.cell._brval = val;
   if (( ! this.grid.multiLine))
   this.setCValue(val, val);
   else
   this.setCValue(val.replace(/\n/g, "<br/>"), val)
}
;
function eXcell_co(cell)
{
   if (cell)
   {
      this.cell = cell;
      this.grid = this.cell.parentNode.grid;
      this.combo = (this.cell._combo || this.grid.getCombo(this.cell._cellIndex));
      this.editable = true
   }
   ;
   this.shiftNext = function()
   {
      var z = this.list.options[this.list.selectedIndex + 1];
      if (z)z.selected = true;
      this.obj.value = this.list.options[this.list.selectedIndex].text;
      return true
   }
   ;
   this.shiftPrev = function()
   {
      if (this.list.selectedIndex != 0)
      {
         var z = this.list.options[this.list.selectedIndex - 1];
         if (z)z.selected = true;
         this.obj.value = this.list.options[this.list.selectedIndex].text
      }
      ;
      return true
   }
   ;
   this.edit = function()
   {
      this.val = this.getValue();
      this.text = this.getText()._dhx_trim();
      var arPos = this.grid.getPosition(this.cell)

      this.obj = document.createElement("TEXTAREA");
      this.obj.className = "dhx_combo_edit";
      this.obj.style.height = (this.cell.offsetHeight - 4) + "px";
      this.obj.wrap = "soft";
      this.obj.style.textAlign = this.cell.style.textAlign;
      this.obj.onclick = function(e)
      {
         (e || event).cancelBubble = true
      }
      ;
      this.obj.value = this.text
      this.obj.onselectstart = function(e)
      {
         if ( ! e)e = event;
         e.cancelBubble = true;
         return true
      }
      ;
      var editor_obj = this;
      this.obj.onkeyup = function(e)
      {
         var key = (e || event).keyCode;
         if (key == 38 || key == 40 || key == 9)return;
         var val = this.readonly ? String.fromCharCode(key) : this.value;
         var c = editor_obj.list.options;
         for (var i = 0; i < c.length; i ++ )if (c[i].text.indexOf(val) == 0)
         return c[i].selected = true
      }
      ;
      this.list = document.createElement("SELECT");
      this.list.className = 'dhx_combo_select';
      this.list.style.width = this.cell.offsetWidth + "px";
      this.list.style.left = arPos[0] + "px";
      this.list.style.top = arPos[1] + this.cell.offsetHeight + "px";
      this.list.onclick = function(e)
      {
         var ev = e || window.event;
         var cell = ev.target || ev.srcElement


         if (cell.tagName == "OPTION")cell = cell.parentNode;
         editor_obj.setValue(cell.value);
         editor_obj.editable = false;
         editor_obj.grid.editStop()
      }
      ;
      var comboKeys = this.combo.getKeys();
      var fl = false
      var selOptId = 0;
      for (var i = 0; i < comboKeys.length; i ++ )
      {
         var val = this.combo.get(comboKeys[i])
         this.list.options[this.list.options.length] = new Option(val, comboKeys[i]);
         if (comboKeys[i] == this.val)
         {
            selOptId = this.list.options.length - 1;
            fl = true
         }
      }
      ;
      if (fl == false)
      {
         this.list.options[this.list.options.length] = new Option(this.text, this.val === null ? "" : this.val);
         selOptId = this.list.options.length - 1
      }
      ;
      document.body.appendChild(this.list)
      this.list.size = "6";
      this.cstate = 1;
      if (this.editable)
      {
         this.cell.innerHTML = ""
      }
      else
      {
         this.obj.style.width = "1px";
         this.obj.style.height = "1px"
      }
      ;
      this.cell.appendChild(this.obj);
      this.list.options[selOptId].selected = true;
      if (( ! _isFF) || (this.editable))
      {
         this.obj.focus();
         this.obj.focus()
      }
      ;
      if ( ! this.editable)
      {
         this.obj.style.visibility = "hidden";
         this.list.focus();
         this.list.onkeydown = function(e)
         {
            e = e || window.event;
            editor_obj.grid.setActive(true)

            if (e.keyCode < 30)return editor_obj.grid.doKey(
            {
               target : editor_obj.cell,
               keyCode : e.keyCode,
               shiftKey : e.shiftKey,
               ctrlKey : e.ctrlKey
            }
            )
         }
      }
   }
   ;
   this.getValue = function()
   {
      return ((this.cell.combo_value == window.undefined) ? "" : this.cell.combo_value)
   }
   ;
   this.detach = function()
   {
      if (this.val != this.getValue())
      {
         this.cell.wasChanged = true
      }
      ;
      if (this.list.parentNode != null)
      {
         if (this.editable)
         {
            var ind = this.list.options[this.list.selectedIndex]
            if (ind && ind.text == this.obj.value)this.setValue(this.list.value)
            else
            {
               var combo = (this.cell._combo || this.grid.getCombo(this.cell._cellIndex));
               var val = combo.values._dhx_find(this.obj.value);
               if (val != - 1)this.setValue(combo.keys[val]);
               else this.setCValue(this.cell.combo_value = this.obj.value)
            }
         }
         else
         this.setValue(this.list.value)
      }
      ;
      if (this.list.parentNode)this.list.parentNode.removeChild(this.list);
      if (this.obj.parentNode)this.obj.parentNode.removeChild(this.obj);
      return this.val != this.getValue()
   }
}
;
eXcell_co.prototype = new eXcell;
eXcell_co.prototype.getText = function()
{
   return this.cell.innerHTML
}
;
eXcell_co.prototype.setValue = function(val)
{
   if (typeof (val) == "object")
   {
      var optCol = this.grid.xmlLoader.doXPath("./option", val);
      if (optCol.length)this.cell._combo = new dhtmlXGridComboObject();
      for (var j = 0; j < optCol.length; j ++ )this.cell._combo.put(optCol[j].getAttribute("value"),
      optCol[j].firstChild
      ? optCol[j].firstChild.data
      : "");
      val = val.firstChild.data
   }
   ;
   if ((val || "").toString()._dhx_trim() == "")
   val = null
   this.cell.combo_value = val;
   if (val !== null)this.setCValue((this.cell._combo || this.grid.getCombo(this.cell._cellIndex)).get(val) || val, val);
   else
   this.setCValue("&nbsp;", val)
}
;
function eXcell_coro(cell)
{
   this.base = eXcell_co;
   this.base(cell)
   this.editable = false
}
;
eXcell_coro.prototype = new eXcell_co;
function eXcell_cotxt(cell)
{
   this.base = eXcell_co;
   this.base(cell)
}
;
eXcell_cotxt.prototype = new eXcell_co;
eXcell_cotxt.prototype.getText = function()
{
   return (_isIE ? this.cell.innerText : this.cell.textContent)
}
;
eXcell_cotxt.prototype.setValue = function(val)
{
   if (typeof (val) == "object")
   {
      var optCol = this.grid.xmlLoader.doXPath("./option", val);
      if (optCol.length)this.cell._combo = new dhtmlXGridComboObject();
      for (var j = 0; j < optCol.length; j ++ )this.cell._combo.put(optCol[j].getAttribute("value"),
      optCol[j].firstChild
      ? optCol[j].firstChild.data
      : "");
      val = val.firstChild.data
   }
   ;
   if ((val || "").toString()._dhx_trim() == "")
   val = null

   if (val !== null)this.setCTxtValue((this.cell._combo || this.grid.getCombo(this.cell._cellIndex)).get(val) || val, val);
   else
   this.setCTxtValue(" ", val);
   this.cell.combo_value = val
}
;
function eXcell_corotxt(cell)
{
   this.base = eXcell_co;
   this.base(cell)
   this.editable = false
}
;
eXcell_corotxt.prototype = new eXcell_cotxt;
function eXcell_cp(cell)
{
   try
   {
      this.cell = cell;
      this.grid = this.cell.parentNode.grid
   }
   catch (er)
   {
   }
   ;
   this.edit = function()
   {
      this.val = this.getValue()
      this.obj = document.createElement("SPAN");
      this.obj.style.border = "1px solid black";
      this.obj.style.position = "absolute";
      var arPos = this.grid.getPosition(this.cell);
      this.colorPanel(4, this.obj)
      document.body.appendChild(this.obj);
      this.obj.style.left = arPos[0] + "px";
      this.obj.style.top = arPos[1] + this.cell.offsetHeight + "px"
   }
   ;
   this.toolDNum = function(value)
   {
      if (value.length == 1)value = '0' + value;
      return value
   }
   ;
   this.colorPanel = function(index, parent)
   {
      var tbl = document.createElement("TABLE");
      parent.appendChild(tbl)
      tbl.cellSpacing = 0;
      tbl.editor_obj = this;
      tbl.style.cursor = "default";
      tbl.onclick = function(e)
      {
         var ev = e || window.event
         var cell = ev.target || ev.srcElement;
         var ed = cell.parentNode.parentNode.parentNode.editor_obj
         ed.setValue(cell._bg)
         ed.grid.editStop()
      }
      ;
      var cnt = 256 / index;
      for (var j = 0; j <= (256 / cnt); j ++ )
      {
         var r = tbl.insertRow(j);
         for (var i = 0; i <= (256 / cnt); i ++ )
         {
            for (var n = 0; n <= (256 / cnt); n ++ )
            {
               R = new Number(cnt * j) - (j == 0 ? 0 : 1)
               G = new Number(cnt * i) - (i == 0 ? 0 : 1)
               B = new Number(cnt * n) - (n == 0 ? 0 : 1)
               var rgb =
               this.toolDNum(R.toString(16)) + "" + this.toolDNum(G.toString(16)) + "" + this.toolDNum(B.toString(16));
               var c = r.insertCell(i);
               c.width = "10px";
               c.innerHTML = "&nbsp;";
               c.title = rgb.toUpperCase()
               c.style.backgroundColor = "#" + rgb
               c._bg = "#" + rgb;
               if (this.val != null && "#" + rgb.toUpperCase() == this.val.toUpperCase())
               {
                  c.style.border = "2px solid white"
               }
            }
         }
      }
   }
   ;
   this.getValue = function()
   {
      return this.cell.firstChild._bg || ""
   }
   ;
   this.getRed = function()
   {
      return Number(parseInt(this.getValue().substr(1, 2), 16))
   }
   ;
   this.getGreen = function()
   {
      return Number(parseInt(this.getValue().substr(3, 2), 16))
   }
   ;
   this.getBlue = function()
   {
      return Number(parseInt(this.getValue().substr(5, 2), 16))
   }
   ;
   this.detach = function()
   {
      if (this.obj.offsetParent != null)document.body.removeChild(this.obj);
      return this.val != this.getValue()
   }
}
;
eXcell_cp.prototype = new eXcell;
eXcell_cp.prototype.setValue = function(val)
{
   this.setCValue("<div style='width:100%;height:"+((this.grid.multiLine?cell.offsetHeight-2:16))+";background-color:"+(val||"")
   + ";border:0px;'>&nbsp;</div>",
   val);
   this.cell.firstChild._bg = val
}
;
function eXcell_img(cell)
{
   try
   {
      this.cell = cell;
      this.grid = this.cell.parentNode.grid
   }
   catch (er)
   {
   }
   ;
   this.getValue = function()
   {
      if (this.cell.firstChild.tagName == "IMG")return this.cell.firstChild.src + (this.cell.titFl != null
      ? "^" + this.cell.tit
      : "");
      else if (this.cell.firstChild.tagName == "A")
      {
         var out = this.cell.firstChild.firstChild.src + (this.cell.titFl != null ? "^" + this.cell.tit : "");
         out += "^" + this.cell.lnk;
         if (this.cell.trg)out += "^" + this.cell.trg
         return out
      }
   }
   ;
   this.isDisabled = function()
   {
      return true
   }
}
;
eXcell_img.prototype = new eXcell;
eXcell_img.prototype.getTitle = function()
{
   return this.cell.tit
}
;
eXcell_img.prototype.setValue = function(val)
{
   var title = val;
   if (val.indexOf("^") != - 1)
   {
      var ar = val.split("^");
      val = ar[0]
      title = this.cell._attrs.title || ar[1];
      if (ar.length > 2)
      {
         this.cell.lnk = ar[2]

         if (ar[3])this.cell.trg = ar[3]
      }
      ;
      this.cell.titFl = "1"
   }
   ;
   this.setCValue("<img src='"+this.grid.iconURL+(val||"")._dhx_trim()+"' border='0'>", val);
   if (this.cell.lnk)
   {
      this.cell.innerHTML = "<a href='"+this.cell.lnk+"' target='"+this.cell.trg+"'>" + this.cell.innerHTML + "</a>"
   }
   ;
   this.cell.tit = title
}
;
function eXcell_price(cell)
{
   this.base = eXcell_ed;
   this.base(cell)
   this.getValue = function()
   {
      if (this.cell.childNodes.length > 1)return this.cell.childNodes[1].innerHTML.toString()._dhx_trim()
      else
      return "0"
   }
}
;
eXcell_price.prototype = new eXcell_ed;
eXcell_price.prototype.setValue = function(val)
{
   if (isNaN(parseFloat(val)))
   {
      val = this.val || 0
   }
   ;
   var color = "green";
   if (val < 0)color = "red";
   this.setCValue("<span>$</span><span style='padding-right:2px;color:"+color+";'>" + val + "</span>", val)
}
;
function eXcell_dyn(cell)
{
   this.base = eXcell_ed;
   this.base(cell)
   this.getValue = function()
   {
      return this.cell.firstChild.childNodes[1].innerHTML.toString()._dhx_trim()
   }
}
;
eXcell_dyn.prototype = new eXcell_ed;
eXcell_dyn.prototype.setValue = function(val)
{
   if ( ! val || isNaN(Number(val)))
   {
      if (val !== "")val = 0
   }
   ;
   if (val > 0)
   {
      var color = "green";
      var img = "dyn_up.gif"
   }
   else if (val == 0)
   {
      var color = "black";
      var img = "dyn_.gif"
   }
   else
   {
      var color = "red";
      var img = "dyn_down.gif"
   }
   ;
   this.setCValue("<div style='position:relative;padding-right:2px;width:100%;overflow:hidden;white-space:nowrap;'><img src='"+this.grid.imgURL+""+img
   + "' height='15' style='position:absolute;top:0px;left:0px;display:none'><span style=' width:100%;size:10px;color:" + color + ";'>"+val
   + "</span></div>",
   val)
}
;
function eXcell_ro(cell)
{
   if (cell)
   {
      this.cell = cell;
      this.grid = this.cell.parentNode.grid
   }
   ;
   this.edit = function()
   {
   }
   ;
   this.isDisabled = function()
   {
      return true
   }
   ;
   this.getValue = function()
   {
      return this.cell._clearCell ? "" : this.cell.innerHTML.toString()._dhx_trim()
   }
}
;
eXcell_ro.prototype = new eXcell;
function eXcell_ron(cell)
{
   this.cell = cell;
   this.grid = this.cell.parentNode.grid;
   this.edit = function()
   {
   }
   ;
   this.isDisabled = function()
   {
      return true
   }
   ;
   this.getValue = function()
   {
      return this.cell._clearCell ? "" : this.grid._aplNFb(this.cell.innerHTML.toString()._dhx_trim(), this.cell._cellIndex)
   }
}
;
eXcell_ron.prototype = new eXcell;
eXcell_ron.prototype.setValue = function(val)
{
   if (val === 0)
   {
   }
   else if ( ! val || val.toString()._dhx_trim() == "")
   {
      this.setCValue("&nbsp;");
      return this.cell._clearCell = true
   }
   ;
   this.setCValue(val ? this.grid._aplNF(val, this.cell._cellIndex) : "0");
   this.cell._clearCell = false
}
;
function eXcell_rotxt(cell)
{
   this.cell = cell;
   this.grid = this.cell.parentNode.grid;
   this.edit = function()
   {
   }
   ;
   this.isDisabled = function()
   {
      return true
   }
   ;
   this.setValue = function(val)
   {
      if ( ! val || val.toString()._dhx_trim() == "")
      val = " ";
      this.setCTxtValue(val)
   }
   ;
   this.getValue = function()
   {
      if (this.cell._clearCell)return "";
      return (_isIE ? this.cell.innerText : this.cell.textContent)
   }
}
;
eXcell_rotxt.prototype = new eXcell;
function dhtmlXGridComboObject()
{
   this.keys = new dhtmlxArray();
   this.values = new dhtmlxArray();
   this.put = function(key, value)
   {
      for (var i = 0; i < this.keys.length; i ++ )
      {
         if (this.keys[i] == key)
         {
            this.values[i] = value;
            return true
         }
      }
      ;
      this.values[this.values.length] = value;
      this.keys[this.keys.length] = key
   }
   ;
   this.get = function(key)
   {
      for (var i = 0; i < this.keys.length; i ++ )
      {
         if (this.keys[i] == key)
         {
            return this.values[i]
         }
      }
      ;
      return null
   }
   ;
   this.clear = function()
   {
      this.keys = new dhtmlxArray();
      this.values = new dhtmlxArray()
   }
   ;
   this.remove = function(key)
   {
      for (var i = 0; i < this.keys.length; i ++ )
      {
         if (this.keys[i] == key)
         {
            this.keys._dhx_removeAt(i);
            this.values._dhx_removeAt(i);
            return true
         }
      }
   }
   ;
   this.size = function()
   {
      var j = 0;
      for (var i = 0; i < this.keys.length; i ++ )
      {
         if (this.keys[i] != null)j ++
      }
      ;
      return j
   }
   ;
   this.getKeys = function()
   {
      var keyAr = new Array(0);
      for (var i = 0; i < this.keys.length; i ++ )
      {
         if (this.keys[i] != null)keyAr[keyAr.length] = this.keys[i]
      }
      ;
      return keyAr
   }
   ;
   this.save = function()
   {
      this._save = new Array();
      for (var i = 0; i < this.keys.length; i ++ )this._save[i] = [
      this.keys[i],
      this.values[i]
      ]
   }
   ;
   this.restore = function()
   {
      if (this._save)
      {
         this.keys[i] = new Array();
         this.values[i] = new Array();
         for (var i = 0; i < this._save.length; i ++ )
         {
            this.keys[i] = this._save[i][0];
            this.values[i] = this._save[i][1]
         }
      }
   }
   ;
   return this
}
;
function Hashtable()
{
   this.keys = new dhtmlxArray();
   this.values = new dhtmlxArray();
   return this
}
;
Hashtable.prototype = new dhtmlXGridComboObject;
// (c)dhtmlx ltd. www.dhtmlx.com
// v.2.5 build 090904

/*
Copyright DHTMLX LTD. http : // www.dhtmlx.com
You allowed to use this component or parts of it under GPL terms
To use it on other terms or get Professional edition of the component please contact us at sales@dhtmlx.com
 */
