//#########################################
//## Copyright EZI Software All rights reserved
//#########################################

function CMyDictionary(sClassName, nType, nRows)
{
  var m_sClassName = sClassName;
  var m_nType = nType;
  var m_nRows = nRows;
  var m_colBackground = '#eaf3ff';
  var m_colKeyWordListBackground = '#ffffff';
  var m_colKeyWordListSelected = '#d4eafc';
  var m_pTimerID = 0;
  
  var m_sType = 1;
  var m_sHash = 0; //(Math.random()*100000);
  
  var m_nKeyWordListWidth = 200;
  var m_nWYSIWYGWidth = 300;
  var m_nWYSIWYGHeight = 210;
  
  var m_pAjax = new CMyAJAX();
  
  var m_aKeyWords = new Array();
  var m_nKeyWords = 0;
  var m_nKeyWordLength = 25;
  
  var m_aKeyWordsDescription = new Array();
  var m_aKeyWordsTree = new Array();
  
  var m_nKeyWord_RowNumber = 0;
  var m_nKeyWord_TopID = 0;
  var m_nKeyWord_SelectedID = 0;
  
  this.Display = Display;
  this.Render = Render;
  this.DisplayKeyWordList = DisplayKeyWordList;
  this.DisplayWYSIWYG = DisplayWYSIWYG;
  this.DisplayScroolBar = DisplayScroolBar;
  this.selOn = selOn;
  this.selOff = selOff;
  this.selOff2 = selOff2;
  this.selDown = selDown;
  this.selUp = selUp;
  
  this.OnLoad = OnLoad;
  this.OnKeyUp = OnKeyUp;
  this.OnScroolBarClick = OnScroolBarClick;
  this.OnKeyWordClick = OnKeyWordClick;
  this.OnSave = OnSave;
  this.OnBold = OnBold;
  this.OnItalic = OnItalic;
  this.OnUnderline = OnUnderline;
  this.OnSymbol = OnSymbol;
  this.OnColor = OnColor;
  
  this.InitDictionary = InitDictionary;
  
  this.KeyWords_Reset = KeyWords_Reset;
  this.KeyWords_SetLength = KeyWords_SetLength;
  this.KeyWords_GetLength = KeyWords_GetLength;
  this.KeyWords_Set = KeyWords_Set;
  this.KeyWords_Get = KeyWords_Get;
  this.KeyWords_Display = KeyWords_Display;
  this.KeyWords_CheckIfInCache = KeyWords_CheckIfInCache;
  this.KeyWords_SetTitle = KeyWords_SetTitle;
  this.KeyWordsDescription_Reset = KeyWordsDescription_Reset;
  this.KeyWordsDescription_Set = KeyWordsDescription_Set;
  this.KeyWordsDescription_Get = KeyWordsDescription_Get;
  this.KeyWordsDescription_GetHTMLFromWYSIWYG = KeyWordsDescription_GetHTMLFromWYSIWYG;
  this.KeyWordsDescription_Show = KeyWordsDescription_Show;
  this.KeyWordDescription_Clear = KeyWordDescription_Clear;
  this.KeyWordsTree_Reset = KeyWordsTree_Reset;
  this.KeyWordsTree_Set = KeyWordsTree_Set;
  this.KeyWordsTree_Get = KeyWordsTree_Get;
  this.KeyWordsTree_Search = KeyWordsTree_Search;
  this.Hash_Set = Hash_Set;
  this.Hash_Get = Hash_Get;
  this.Type_Set = Type_Set;
  this.Type_Get = Type_Get;
  this.KeyWordSelection_RowNumber_Set = KeyWordSelection_RowNumber_Set;
  this.KeyWordSelection_RowNumber_Get = KeyWordSelection_RowNumber_Get;
  this.KeyWordSelection_TopID_Set = KeyWordSelection_TopID_Set;
  this.KeyWordSelection_TopID_Get = KeyWordSelection_TopID_Get;
  this.KeyWordSelection_SelectedID_Set = KeyWordSelection_SelectedID_Set;
  this.KeyWordSelection_SelectedID_Get = KeyWordSelection_SelectedID_Get;
  
  this.KeyWord_SelectNone = KeyWord_SelectNone;
  this.KeyWord_SelectRow = KeyWord_SelectRow;
  
  this.EditBox_GetText = EditBox_GetText;
  this.EditBox_SetText = EditBox_SetText;
  this.EditBox_Focus = EditBox_Focus;
  this.ListBox_GetRows = ListBox_GetRows;
  this.ListBox_SelectKeyWord = ListBox_SelectKeyWord;
  this.ListBox_Selection_MoveUP = ListBox_Selection_MoveUP;
  this.ListBox_Selection_MoveDOWN = ListBox_Selection_MoveDOWN;
  this.ListBox_Selection_Find = ListBox_Selection_Find;
  this.ListBox_RecalculateSelection = ListBox_RecalculateSelection;
  
  this.KillTimer = KillTimer;
  
  function Display()
  {
    document.write("<table bgcolor='#eaf3ff' width='520'><tr>");
    
    // editbox
    document.write("<td><table width='100%'><tr><td>");
	  document.write("<input type='text' maxlength='"+m_nKeyWordLength+"' style='width:"+(m_nKeyWordListWidth-5)+"px' id='"+m_sClassName+"_keyword' name='"+m_sClassName+"_keyword' onkeyup='javascript:"+m_sClassName+".OnKeyUp(event)' />");
	  document.write("</td></tr></table></td>");
    
    // selected keyword title and wait
	  document.write("<td><table width='100%'><tr><td>");
    document.write("<div name='"+m_sClassName+"_keyw' id='"+m_sClassName+"_keyw' style='font-weight: bold;'></div>");
    document.write("</td><td width='23'><img name='"+m_sClassName+"_waitimg' id='"+m_sClassName+"_waitimg' src='img/throbber.png' width='20' height='20' alt='' />");
    document.write("</td></tr></table></td>");
    
    document.write("</tr><tr>");
    
    // keywordlist
    document.write("<td>");
    DisplayKeyWordList();
    document.write("</td>");
    
    // WYSIWYG editor
    document.write("<td>");
    DisplayWYSIWYG();
    document.write("</td>");
    
    document.write("</tr><tr>");
    
    // bottom line
    document.write("<td align='right'><div name='"+m_sClassName+"_keywcount' id='"+m_sClassName+"_keywcount' style='font-size: 10px;'>0/0</div></td><td style='font-size: 10px; text-align: center;'>&copy; <a href='http://www.4ezi.com/ezisoftware/' style='text-decoration: none; color: #000000'>EZi Software</a></td>");
    
    document.write("</tr></table>");
  }
  function DisplayKeyWordList()
  {
    document.write("<table width='"+m_nKeyWordListWidth+"' bgcolor='"+m_colKeyWordListBackground+"'><tr><td><table width='100%'>");
    
    for(i=0;i<ListBox_GetRows();i++)
    {
      document.write("<tr><td><div style='cursor: pointer;' onclick='javascript:"+m_sClassName+".OnKeyWordClick("+i+")' id='"+m_sClassName+"_kw"+i+"' name='"+m_sClassName+"_kw"+i+"'>&nbsp;</div></td></tr>");
    }
    
    document.write("</table></td><td width='16'>");
    DisplayScroolBar();
    document.write("</td></tr></table>");
  }
  function DisplayWYSIWYG()
  {
    document.write("<table><tr><td><table cellspacing='0' cellpadding='0'><tr>");
		document.write("<td><img style='border: 1px solid;border-color: #eaf3ff;' src='img/save.gif' width='23' height='21' onmouseover='javascript:"+m_sClassName+".selOn(this)' onmouseout='javascript:"+m_sClassName+".selOff(this)' onmousedown='"+m_sClassName+".selDown(this)' onmouseup='"+m_sClassName+".selUp(this)' onclick='"+m_sClassName+".OnSave()' alt='Save' /></td>");
		document.write("<td width='1' bgcolor='#aaaaff'></td>");
    document.write("<td><img style='border: 1px solid;border-color: #eaf3ff;' src='img/bold.gif' width='23' height='21' onmouseover='javascript:"+m_sClassName+".selOn(this)' onmouseout='javascript:"+m_sClassName+".selOff(this)' onmousedown='"+m_sClassName+".selDown(this)' onmouseup='"+m_sClassName+".selUp(this)' onclick='"+m_sClassName+".OnBold()' alt='Bold' /></td>");
    document.write("<td><img style='border: 1px solid;border-color: #eaf3ff;' src='img/italic.gif' width='23' height='21' onmouseover='javascript:"+m_sClassName+".selOn(this)' onmouseout='javascript:"+m_sClassName+".selOff(this)' onmousedown='"+m_sClassName+".selDown(this)' onmouseup='"+m_sClassName+".selUp(this)' onclick='"+m_sClassName+".OnItalic()' alt='Italic' /></td>");
    document.write("<td><img style='border: 1px solid;border-color: #eaf3ff;' src='img/underline.gif' width='23' height='21' onmouseover='javascript:"+m_sClassName+".selOn(this)' onmouseout='javascript:"+m_sClassName+".selOff(this)' onmousedown='"+m_sClassName+".selDown(this)' onmouseup='"+m_sClassName+".selUp(this)' onclick='"+m_sClassName+".OnUnderline()' alt='Underline' /></td>");
    document.write("<td width='1' bgcolor='#aaaaff'></td>");
		document.write("<td><img style='border: 1px solid;border-color: #eaf3ff;' src='img/char.gif' width='23' height='21' alt='Symbol' /></td>");
    document.write("<td width='1' bgcolor='#aaaaff'></td>");
		document.write("<td><img style='border: 1px solid;border-color: #eaf3ff;' src='img/black.gif' width='23' height='21' onmouseover='javascript:"+m_sClassName+".selOn(this)' onmouseout='javascript:"+m_sClassName+".selOff(this)' onmousedown='"+m_sClassName+".selDown(this)' onmouseup='"+m_sClassName+".selUp(this)' onclick='"+m_sClassName+".OnColor(\"#000000\")' alt='Black' /></td>");
    document.write("<td><img style='border: 1px solid;border-color: #eaf3ff;' src='img/red.gif' width='23' height='21' onmouseover='javascript:"+m_sClassName+".selOn(this)' onmouseout='javascript:"+m_sClassName+".selOff(this)' onmousedown='"+m_sClassName+".selDown(this)' onmouseup='"+m_sClassName+".selUp(this)' onclick='"+m_sClassName+".OnColor(\"#800000\")' alt='Dark Red' /></td>");
    document.write("<td><img style='border: 1px solid;border-color: #eaf3ff;' src='img/green.gif' width='23' height='21' onmouseover='javascript:"+m_sClassName+".selOn(this)' onmouseout='javascript:"+m_sClassName+".selOff(this)' onmousedown='"+m_sClassName+".selDown(this)' onmouseup='"+m_sClassName+".selUp(this)' onclick='"+m_sClassName+".OnColor(\"#008080\")' alt='Dark Green' /></td>");
    document.write("<td><img style='border: 1px solid;border-color: #eaf3ff;' src='img/green2.gif' width='23' height='21' onmouseover='javascript:"+m_sClassName+".selOn(this)' onmouseout='javascript:"+m_sClassName+".selOff(this)' onmousedown='"+m_sClassName+".selDown(this)' onmouseup='"+m_sClassName+".selUp(this)' onclick='"+m_sClassName+".OnColor(\"#008000\")' alt='Green' /></td>");
    document.write("<td><img style='border: 1px solid;border-color: #eaf3ff;' src='img/pink.gif' width='23' height='21' onmouseover='javascript:"+m_sClassName+".selOn(this)' onmouseout='javascript:"+m_sClassName+".selOff(this)' onmousedown='"+m_sClassName+".selDown(this)' onmouseup='"+m_sClassName+".selUp(this)' onclick='"+m_sClassName+".OnColor(\"#800080\")' alt='Dark Pink' /></td>");
    document.write("<td><img style='border: 1px solid;border-color: #eaf3ff;' src='img/blue.gif' width='23' height='21' onmouseover='javascript:"+m_sClassName+".selOn(this)' onmouseout='javascript:"+m_sClassName+".selOff(this)' onmousedown='"+m_sClassName+".selDown(this)' onmouseup='"+m_sClassName+".selUp(this)' onclick='"+m_sClassName+".OnColor(\"#0000ff\")' alt='Blue' /></td>");
		document.write("</tr></table></td></tr><tr><td>");
    document.write("<iframe id='"+m_sClassName+"_keyworddescription' name='"+m_sClassName+"_keyworddescription' style='width: "+m_nWYSIWYGWidth+"px; height:"+m_nWYSIWYGHeight+"px;BACKGROUND-COLOR: #ffffff;' frameborder='0'></iframe>");
    document.write("</td></tr></table>");
  }
  function DisplayScroolBar()
  {
    document.write("<table width='16' cellspacing='0' cellpadding='0' style='border: 1px solid;border-color: #eaf3ff;'>");
    
    document.write("<tr><td><img style='border: 1px solid;border-color: #eaf3ff;' src='img/uup.gif' width='16' height='16' onmouseover='javascript:"+m_sClassName+".selOn(this)' onmouseout='javascript:"+m_sClassName+".selOff2(this)' onmousedown='"+m_sClassName+".selDown(this)' onmouseup='"+m_sClassName+".selUp(this)' onclick='"+m_sClassName+".OnScroolBarClick(-2)' alt='' /></td></tr>");
    document.write("<tr><td><img style='border: 1px solid;border-color: #eaf3ff;' src='img/up.gif' width='16' height='16' onmouseover='javascript:"+m_sClassName+".selOn(this)' onmouseout='javascript:"+m_sClassName+".selOff2(this)' onmousedown='"+m_sClassName+".selDown(this)' onmouseup='"+m_sClassName+".selUp(this)' onclick='"+m_sClassName+".OnScroolBarClick(-1)' alt='' /></td></tr>");
    
    for(i=1;i<ListBox_GetRows()-1;i++)
    {
      document.write("<tr><td>&nbsp;</td></tr>");
    }
    
    document.write("<tr><td><img style='border: 1px solid;border-color: #eaf3ff;' src='img/dn.gif' width='16' height='16' onmouseover='javascript:"+m_sClassName+".selOn(this)' onmouseout='javascript:"+m_sClassName+".selOff2(this)' onmousedown='"+m_sClassName+".selDown(this)' onmouseup='"+m_sClassName+".selUp(this)' onclick='"+m_sClassName+".OnScroolBarClick(1)' alt='' /></td></tr>");
    document.write("<tr><td><img style='border: 1px solid;border-color: #eaf3ff;' src='img/ddn.gif' width='16' height='16' onmouseover='javascript:"+m_sClassName+".selOn(this)' onmouseout='javascript:"+m_sClassName+".selOff2(this)' onmousedown='"+m_sClassName+".selDown(this)' onmouseup='"+m_sClassName+".selUp(this)' onclick='"+m_sClassName+".OnScroolBarClick(2)' alt='' /></td></tr>");
    
    document.write("</table>");
  }
  
  function selOn(ctrl)
  {
    ctrl.style.borderColor = '#000000';
    ctrl.style.backgroundColor = '#B5BED6';
    ctrl.style.cursor = 'pointer';
  }
  function selOff(ctrl)
  {
    ctrl.style.borderColor = '#eaf3ff';  
    ctrl.style.backgroundColor = '#eaf3ff';
  }
  function selOff2(ctrl)
  {
    ctrl.style.borderColor = '#eaf3ff';  
    ctrl.style.backgroundColor = '#ffffff';
  }
  function selDown(ctrl)
  {
    ctrl.style.backgroundColor = '#8492B5';
  }
  function selUp(ctrl)
  {
    ctrl.style.backgroundColor = '#B5BED6';
  }
  function Render()
  {
    alert("hojladri");
  }
  
  function OnLoad()
  {
    setTimeout(m_sClassName+".InitDictionary()", 500);
  }
  function OnKeyUp(e)
  {
    var key = window.event ? e.keyCode : e.which;

    // up
    if(key==38)
    {
      ListBox_Selection_MoveUP(1);
    }
    // down
    else if(key==40)
    {
      ListBox_Selection_MoveDOWN(1);
    }
    // pageup
    else if(key==33)
    {
      ListBox_Selection_MoveUP(ListBox_GetRows());
    }
    // pagedn
    else if(key==34)
    {
      ListBox_Selection_MoveDOWN(ListBox_GetRows());
    }
    else
    {
      ListBox_Selection_Find();
    }
    KeyWords_SetTitle(EditBox_GetText());
  }
  function OnScroolBarClick(nStep)
  {
    if(nStep==-1)
    {
      ListBox_Selection_MoveUP(1);
    }
    else if(nStep==-2)
    {
      ListBox_Selection_MoveUP(ListBox_GetRows());
    }
    else if(nStep==1)
    {
      ListBox_Selection_MoveDOWN(1);
    }
    else if(nStep==2)
    {
      ListBox_Selection_MoveDOWN(ListBox_GetRows());
    }
  }
  function OnKeyWordClick(nRowNumber)
  {
    if((KeyWords_GetLength()==0) || ((KeyWords_GetLength()<ListBox_GetRows()) && (nRowNumber>KeyWords_GetLength()-1)))
    {
      EditBox_Focus();
      return;
    }
    KeyWord_SelectNone();
    KeyWordDescription_Clear();
    
    KeyWordSelection_RowNumber_Set(nRowNumber);
    KeyWordSelection_SelectedID_Set(KeyWordSelection_TopID_Get()+KeyWordSelection_RowNumber_Get());
    
    ListBox_SelectKeyWord();
  }
  function OnSave()
  {
    var sHTML = KeyWordsDescription_GetHTMLFromWYSIWYG();    
    var sHTMLLower = sHTML.toLowerCase();
    sHTMLLower = sHTMLLower.replace(/ /g,"");
    
    if(!((sHTML=="<p style='margin: 0px'></p>") || (sHTML=="") || (sHTML==" ")))
    {
      var sKeywordTyped = EditBox_GetText();
      if((sKeywordTyped!="") || (sKeywordTyped!=" "))
      {
        m_pAjax.ExecuteCall("search.php?class="+m_sClassName+"&keywordtype="+Type_Get()+"&keywordhash="+Hash_Get()+"&keyword="+m_pAjax.EncodeURL(sKeywordTyped)+"&description="+m_pAjax.EncodeURL(sHTML)+"&action=save");
      }
    }
  }
  function OnBold()
  {
    eval(m_sClassName+"_keyworddescription.document.execCommand('bold', false, null);");
  }
  function OnItalic()
  {
    eval(m_sClassName+"_keyworddescription.document.execCommand('italic', false, null);");
  }
  function OnUnderline()
  {
    eval(m_sClassName+"_keyworddescription.document.execCommand('underline', false, null);");
  }
  function OnSymbol()
  {
    alert("onsymbol");
  }
  function OnColor(sColor)
  {
    eval(m_sClassName+"_keyworddescription.document.execCommand('ForeColor', false, '"+sColor+"');");
  }
  function InitDictionary()
  {
    EditBox_SetText('');
    KeyWord_SelectNone();
    
    KeyWords_Reset();
    KeyWordsDescription_Reset();
    KeyWordsTree_Reset();
    KeyWords_SetLength(0);
    KeyWords_Display(0);
    KeyWordDescription_Clear();
    KeyWords_SetTitle('');
    
    eval(m_sClassName+"_keyworddescription.document.designMode = 'On'");
    m_pAjax.Set_JSOnRequest("document.getElementById('"+m_sClassName+"_waitimg').src='img/throbber.gif';");
    m_pAjax.Set_JSOnResponse("document.getElementById('"+m_sClassName+"_waitimg').src='img/throbber.png';");
    
    m_pAjax.ExecuteCall("search.php?class="+m_sClassName+"&keywordtype="+Type_Get()+"&keywordhash="+Hash_Get());
  }
  
  function KeyWords_Reset()
  {
    m_aKeyWords = new Array();
    m_nKeyWords = 0;
  }
  function KeyWords_CheckIfInCache(nTopID)
  {
    if(KeyWords_GetLength()==0)
    {
      return true;
    }
    
    var bReturn = false;
    if((nTopID>=0) && (nTopID<KeyWords_GetLength()))
    {
      var nTo = nTopID + ListBox_GetRows();
      if(nTo>KeyWords_GetLength())
      {
        nTo = KeyWords_GetLength();
      }
      var i=0;
      bReturn = true;
      for(i=nTopID;i<nTo;i++)
      {
        var sKeyW = KeyWords_Get(i);
        if(sKeyW==null)
        {
          bReturn = false;
        }
      }
    }
    return bReturn;
  }
  function KeyWords_SetLength(nLength)
  {
    m_nKeyWords = nLength;
  }
  function KeyWords_GetLength()
  {
    return m_nKeyWords;
  }
  function KeyWords_Set(nIndex, sKeyWord)
  {
    m_aKeyWords[nIndex] = sKeyWord;
  }
  function KeyWords_Get(nIndex)
  {
    return m_aKeyWords[nIndex];
  }
  function KeyWords_Display(nIndex)
  {
    if(KeyWords_GetLength()>0)
    {
      var nTo = 0;
      var i = 0, nCnt = 0;
  
      if(nIndex>KeyWords_GetLength())
      {
        nIndex = KeyWords_GetLength() - ListBox_GetRows();
      }
      if(nIndex<0)
      {
        nIndex = 0;
      } 
  
      nTo = nIndex + ListBox_GetRows();
      if(nTo>KeyWords_GetLength())
      {
        nTo = KeyWords_GetLength();
      }

      for(i=nIndex;i<nTo;i++)
      {
        var sKeyW = KeyWords_Get(i);
        if(sKeyW==null)
        {
          sKeyW = '&nbsp;';
        }
        document.getElementById(m_sClassName+"_kw"+nCnt).innerHTML = sKeyW;
        nCnt++;
      }
	    if(nCnt<(ListBox_GetRows()-1))
	    {
	      for(i=nCnt;i<ListBox_GetRows();i++)
		    {
		      document.getElementById(m_sClassName+"_kw"+i).innerHTML = "&nbsp;";
		    }
	    }
    }
    else
    {
      for(i=0;i<ListBox_GetRows();i++)
		  {
		    document.getElementById(m_sClassName+"_kw"+i).innerHTML = "&nbsp;";
		  }
    }
  }
  function KeyWords_SetTitle(sKeyWord)
  {
    document.getElementById(m_sClassName+"_keyw").innerHTML = sKeyWord;
    document.getElementById(m_sClassName+"_keywcount").innerHTML = (KeyWordSelection_SelectedID_Get()+1) +"/"+KeyWords_GetLength();
  }
  function KeyWordsDescription_Reset()
  {
    m_aKeyWordsDescription = new Array();
  }
  function KeyWordsDescription_Set(nIndex, sDescription)
  {
    m_aKeyWordsDescription[nIndex] = sDescription;
  }
  function KeyWordsDescription_Get(nIndex)
  {
    var sHTML = m_aKeyWordsDescription[nIndex];
    if(sHTML==null)
    {
      sHTML = "<p style='margin: 0px'></p>";
    }
    return sHTML;
  }
  function KeyWordsDescription_GetHTMLFromWYSIWYG()
  {
    var elements = null;
    eval("elements="+m_sClassName+"_keyworddescription.document.getElementsByTagName('p');");
    for(var i = 0; i < elements.length; i++) 
    {
      elements[i].style.margin='0px';
    }
    var sHTML = '';
    eval("sHTML="+m_sClassName+"_keyworddescription.document.body.innerHTML;");
    return sHTML;
  }
  function KeyWordsDescription_Show(nIndex)
  {    
    eval(m_sClassName+"_keyworddescription.document.body.innerHTML = "+m_sClassName+".KeyWordsDescription_Get("+nIndex+");");
  }
  function KeyWordDescription_Clear()
  {
    eval(m_sClassName+"_keyworddescription.document.body.innerHTML = \"<p style='margin: 0px'></p>\";");
  }
  function KeyWordsTree_Reset()
  {
    m_aKeyWordsTree = new Array();
  }
  function KeyWordsTree_Set(sKeyWord, nIndex)
  {
    m_aKeyWordsTree[sKeyWord] = nIndex;
  }
  function KeyWordsTree_Get(sKeyWord)
  {
    return m_aKeyWordsTree[sKeyWord];
  }
  function KeyWordsTree_Search(sKeyWord)
  {
    // load keyword list from db
    m_pAjax.ExecuteCall("search.php?class="+m_sClassName+"&keywordtype="+Type_Get()+"&keywordhash="+Hash_Get()+"&topid="+KeyWordSelection_TopID_Get()+"&keyword="+m_pAjax.EncodeURL(sKeyWord)+"&action=search");
  }
  function Hash_Set(sHash)
  {
    m_sHash = sHash;
  }
  function Hash_Get()
  {
    return m_sHash;
  }
  function Type_Set(sType)
  {
    m_sType = sType;
  }
  function Type_Get()
  {
    return m_sType;
  }
  function KeyWordSelection_RowNumber_Set(nRowNumber)
  {
    m_nKeyWord_RowNumber = nRowNumber;
  }
  function KeyWordSelection_RowNumber_Get()
  {
    return m_nKeyWord_RowNumber;
  }
  function KeyWordSelection_TopID_Set(nIndex)
  {
    m_nKeyWord_TopID = nIndex;
  }
  function KeyWordSelection_TopID_Get()
  {
    return m_nKeyWord_TopID;
  }
  function KeyWordSelection_SelectedID_Set(nIndex)
  {
    m_nKeyWord_SelectedID = nIndex;
  }
  function KeyWordSelection_SelectedID_Get(nIndex)
  {
    return m_nKeyWord_SelectedID;
  }
  function KeyWord_SelectNone()
  {
    for(i=0;i<ListBox_GetRows();i++)
    {
      document.getElementById(m_sClassName+"_kw"+i).style.background = m_colKeyWordListBackground;
    }
  }
  function KeyWord_SelectRow(nRowNumber)
  {
    document.getElementById(m_sClassName+"_kw"+nRowNumber).style.background = m_colKeyWordListSelected;
  }
  function EditBox_SetText(sText)
  {
    document.getElementById(m_sClassName+'_keyword').value = sText;
  }
  function EditBox_GetText()
  {
    var sTxt = document.getElementById(m_sClassName+'_keyword').value;
    return sTxt.replace(/^\s+/g, "");
  }
  function EditBox_Focus()
  {
    document.getElementById(m_sClassName+'_keyword').focus();
  }
  function ListBox_GetRows()
  {
    return m_nRows;
  }
  function ListBox_SelectKeyWord()
  {
    KeyWord_SelectRow(KeyWordSelection_RowNumber_Get());
    KeyWordsDescription_Show(KeyWordSelection_SelectedID_Get());
    EditBox_SetText(KeyWords_Get(KeyWordSelection_SelectedID_Get()));
    EditBox_Focus();
    KeyWords_SetTitle(EditBox_GetText());
  }
  function ListBox_Selection_MoveUP(nStep)
  {
    //KeyWordSelection_SelectedID_Get();
    //KeyWordSelection_TopID_Get();
    //KeyWordSelection_RowNumber_Get();
    //KeyWords_GetLength();
    //ListBox_GetRows();
    
    KeyWord_SelectNone();
    
    if(nStep == 1)
	  {
      // dec selection by 1
      KeyWordSelection_SelectedID_Set(KeyWordSelection_SelectedID_Get()-1);
      // fix selection
	    if(KeyWordSelection_SelectedID_Get()<0)
 	    {
	      KeyWordSelection_SelectedID_Set(0);
	    }
      // if new block must be shown
	    if(KeyWordSelection_TopID_Get()>KeyWordSelection_SelectedID_Get())
	    {
        // set top keyword to selection - block size
		    KeyWordSelection_TopID_Set(KeyWordSelection_SelectedID_Get() - ListBox_GetRows() + 1);
	      if(KeyWordSelection_TopID_Get()<0)
	      {
		      KeyWordSelection_TopID_Set(0);
	      }
        // calculate selected keyword id
        KeyWordSelection_RowNumber_Set(KeyWordSelection_SelectedID_Get() - KeyWordSelection_TopID_Get());
        
        // if keywords already in cache
        if(KeyWords_CheckIfInCache(KeyWordSelection_TopID_Get())==true)
        {
          KeyWords_Display(KeyWordSelection_TopID_Get());
          ListBox_SelectKeyWord();return;
        }
        else
        {
          // load keyword from cache
          m_pAjax.ExecuteCall("search.php?class="+m_sClassName+"&keywordtype="+Type_Get()+"&keywordhash="+Hash_Get()+"&topid="+KeyWordSelection_TopID_Get()+"&keyid="+KeyWordSelection_SelectedID_Get()+"&action=list");
          return;
        }
	    }
      else
      {
        // calculate selected keyword id
        KeyWordSelection_RowNumber_Set(KeyWordSelection_SelectedID_Get() - KeyWordSelection_TopID_Get());
        ListBox_SelectKeyWord();return;
      }
	  }
	  else
	  {
      // if top keyword selected
	    if(KeyWordSelection_SelectedID_Get()==KeyWordSelection_TopID_Get())
	    {
        // calculate previous block
	      KeyWordSelection_TopID_Set(KeyWordSelection_TopID_Get() - ListBox_GetRows());
		    if(KeyWordSelection_TopID_Get()<0)
		    {
		      KeyWordSelection_TopID_Set(0);
		    }
        KeyWordSelection_SelectedID_Set(KeyWordSelection_TopID_Get());
		    // calculate selected keyword id
        KeyWordSelection_RowNumber_Set(KeyWordSelection_SelectedID_Get() - KeyWordSelection_TopID_Get());
        
        // if keywords already in cache
        if(KeyWords_CheckIfInCache(KeyWordSelection_TopID_Get())==true)
        {
          KeyWords_Display(KeyWordSelection_TopID_Get());
          ListBox_SelectKeyWord();return;
        }
        else
        {
          // load keyword from cache
          m_pAjax.ExecuteCall("search.php?class="+m_sClassName+"&keywordtype="+Type_Get()+"&keywordhash="+Hash_Get()+"&topid="+KeyWordSelection_TopID_Get()+"&keyid="+KeyWordSelection_SelectedID_Get()+"&action=list");
          return;
        }
	    }
      else
      {
        KeyWordSelection_SelectedID_Set(KeyWordSelection_TopID_Get());
        KeyWordSelection_RowNumber_Set(KeyWordSelection_SelectedID_Get() - KeyWordSelection_TopID_Get());
        ListBox_SelectKeyWord();return;
      }
	  }
  }
  function ListBox_Selection_MoveDOWN(nStep)
  {
    //KeyWordSelection_SelectedID_Get();
    //KeyWordSelection_TopID_Get();
    //KeyWordSelection_RowNumber_Get();
    //KeyWords_GetLength();
    //ListBox_GetRows();
    
    KeyWord_SelectNone();
    
    if(nStep == 1)
	  {
      // add sečected id by 1
      KeyWordSelection_SelectedID_Set(KeyWordSelection_SelectedID_Get()+1);
      // if selected id not in range
	    if(KeyWordSelection_SelectedID_Get()>=KeyWords_GetLength())
      {
        // set selected id to last keyword
        KeyWordSelection_SelectedID_Set(KeyWords_GetLength()-1);
      }
      // if selected id out of list
	    if((KeyWordSelection_TopID_Get()+ListBox_GetRows()-1)<KeyWordSelection_SelectedID_Get())
  	  {
        // set top id to selected id
		    KeyWordSelection_TopID_Set(KeyWordSelection_SelectedID_Get());
        // if last block not fit
	      if((KeyWordSelection_TopID_Get()+ListBox_GetRows())>=KeyWords_GetLength())
	      {
          // recalculate last block
	        KeyWordSelection_TopID_Set(KeyWords_GetLength() - ListBox_GetRows());
	      }
        // calculate selected keyword id
        KeyWordSelection_RowNumber_Set(KeyWordSelection_SelectedID_Get() - KeyWordSelection_TopID_Get());
        
        // if keywords already in cache
        if(KeyWords_CheckIfInCache(KeyWordSelection_TopID_Get())==true)
        {
          KeyWords_Display(KeyWordSelection_TopID_Get());
          ListBox_SelectKeyWord();return;
        }
        else
        {
          // load keyword from cache
          m_pAjax.ExecuteCall("search.php?class="+m_sClassName+"&keywordtype="+Type_Get()+"&keywordhash="+Hash_Get()+"&topid="+KeyWordSelection_TopID_Get()+"&keyid="+KeyWordSelection_SelectedID_Get()+"&action=list");
          return;
        }
	    }
      else
      {
        // calculate selected keyword id
        KeyWordSelection_RowNumber_Set(KeyWordSelection_SelectedID_Get() - KeyWordSelection_TopID_Get());
        ListBox_SelectKeyWord();return;
      }
	  }
	  else
	  {
      // if last row selected
	    if((KeyWordSelection_TopID_Get()+ListBox_GetRows()-2)<KeyWordSelection_SelectedID_Get())
  	  {
        // set top id to next block
	      KeyWordSelection_TopID_Set(KeyWordSelection_TopID_Get() + ListBox_GetRows());
        // if last block not fit
		    if((KeyWordSelection_TopID_Get()+ListBox_GetRows())>=KeyWords_GetLength())
	      {
	        KeyWordSelection_TopID_Set(KeyWords_GetLength() - ListBox_GetRows());
	      }
		    KeyWordSelection_SelectedID_Set(KeyWordSelection_TopID_Get() + ListBox_GetRows() - 1);
		    // calculate selected keyword id
        KeyWordSelection_RowNumber_Set(KeyWordSelection_SelectedID_Get() - KeyWordSelection_TopID_Get());
        
        // if keywords already in cache
        if(KeyWords_CheckIfInCache(KeyWordSelection_TopID_Get())==true)
        {
          KeyWords_Display(KeyWordSelection_TopID_Get());
          ListBox_SelectKeyWord();return;
        }
        else
        {
          // load keyword from cache
          m_pAjax.ExecuteCall("search.php?class="+m_sClassName+"&keywordtype="+Type_Get()+"&keywordhash="+Hash_Get()+"&topid="+KeyWordSelection_TopID_Get()+"&keyid="+KeyWordSelection_SelectedID_Get()+"&action=list");
          return;
        }
	    }
	    else
	    {
        // select last keyword in list
	      KeyWordSelection_SelectedID_Set(KeyWordSelection_TopID_Get() + ListBox_GetRows() - 1);
		    if(KeyWordSelection_SelectedID_Get()>(KeyWords_GetLength()-1))
		    {
		      KeyWordSelection_SelectedID_Set(KeyWords_GetLength()-1);
		    }
        // calculate selected keyword id
        KeyWordSelection_RowNumber_Set(KeyWordSelection_SelectedID_Get() - KeyWordSelection_TopID_Get());
        ListBox_SelectKeyWord();return;
	    }
	  }
  }
  function ListBox_Selection_Find()
  {
    var sKeyWord = EditBox_GetText();
    var sKeywordNoSpaces = sKeyWord.replace(/ /g,"");
    
    // kill timer
    KillTimer();
    
    // if nothing in editbox
    if((sKeywordNoSpaces=="") || (sKeywordNoSpaces==" "))
    {
      
      KeyWord_SelectNone();
      KeyWordDescription_Clear();
    }
    else
    {
      var nKeyWordPosition = KeyWordsTree_Get(sKeyWord);
      // if keyword not in hash table
      if(nKeyWordPosition == null)
      {
        m_pTimerID = setTimeout(m_sClassName+".KeyWordsTree_Search('"+sKeyWord+"')", 500);
        return;
      }
      else
      {
        // if keyword in hash table
        ListBox_RecalculateSelection(nKeyWordPosition);
        
        // if keywords already in cache
        if(KeyWords_CheckIfInCache(KeyWordSelection_TopID_Get())==true)
        {
          KeyWord_SelectNone();
          KeyWordDescription_Clear();
          KeyWords_Display(KeyWordSelection_TopID_Get());
          // if typed keyword match keyword in dictionary
          if(sKeyWord==KeyWords_Get(KeyWordSelection_SelectedID_Get()))
          {
            ListBox_SelectKeyWord();return;
          }
          else
          {
            KeyWord_SelectRow(KeyWordSelection_RowNumber_Get());return;
          }
        }
        else
        {
          // load keyword list from db
          m_pAjax.ExecuteCall("search.php?class="+m_sClassName+"&keywordtype="+Type_Get()+"&keywordhash="+Hash_Get()+"&topid="+KeyWordSelection_TopID_Get()+"&keyid="+KeyWordSelection_SelectedID_Get()+"&action=list");
          return;
        }
      }
    }
  }
  function ListBox_RecalculateSelection(nKeyWordNewID)
  {
    // if inside of displayed keywordlist
    if((nKeyWordNewID>=KeyWordSelection_TopID_Get()) && (nKeyWordNewID<(KeyWordSelection_TopID_Get()+ListBox_GetRows())))
    {
      KeyWordSelection_SelectedID_Set(nKeyWordNewID);
      // calculate selected keyword id
      KeyWordSelection_RowNumber_Set(KeyWordSelection_SelectedID_Get() - KeyWordSelection_TopID_Get());
    }
    else
    {
      KeyWordSelection_TopID_Set(nKeyWordNewID);
      KeyWordSelection_SelectedID_Set(nKeyWordNewID);
      // if last block not fit
		  if((KeyWordSelection_TopID_Get()+ListBox_GetRows())>=KeyWords_GetLength())
	    {
	      KeyWordSelection_TopID_Set(KeyWords_GetLength() - ListBox_GetRows());
	    }
      // calculate selected keyword id
      KeyWordSelection_RowNumber_Set(KeyWordSelection_SelectedID_Get() - KeyWordSelection_TopID_Get());
    }
  }
  function KillTimer()
  {
    if(m_pTimerID)
    {
      clearTimeout(m_pTimerID);
      m_pTimerID = 0;
    }
  }
}
