// Copyright (C) 2007 Alan Ardzinov, Saint-Petersburg, Russia 
// http://www.terchy.com, ardalan@mail.ru, ICQ 56320602

/*
function htm_AddCss()
function htm_AddNewRow_Table(v, h) 
function htm_Clear(sEditBoxName, event)
function htm_ConfirmMultiDelete(sPrefix, sFormName)
function htm_CountChecked(sPrefix, sFormName)
function htm_DeleteAddedRow(v, iIndex, sConfirm)
function htm_DeleteRow(sRowID, sConfirm) 
function htm_DrawPost(sHref, sLabel, sTitle, sParams)
function htm_FillForm(event)
function htm_FillBlocks( sBlocks )
function htm_FilterForm_Clear(oForm, sExceptionFields)
function htm_Focus(sForm, sElement)
function htm_FormsToHideSelects_Add(sFormName)
function htm_GetAllNodes(oParent)
function htm_GetArrayOfElementsByID(sID)
function htm_GetArrayOfElementsByName(sName)
function htm_GetElById(sElementName)
function htm_GetElementsByName(sName, sFormName)
function htm_GetElementsByPrefix(sPrefix, sFormName)
function htm_GetFormElement(sElemName, vForm)
function htm_GetFormByElementID (sID)
function htm_GetFormName(oElement)
function htm_GetSrcForm(evt)
function htm_GetThisElementIndexInArray_ByName(event, oThis)
function htm_HideAllSelects(vForm, bShow)
function htm_Nothing()
function htm_RemovePx(sStrWithPx)
function htm_Select_GetSelectedIndex(sName)
function htm_Select_GetText(sName)
function htm_Select_GetValue(sName)
function htm_Select_SetSelectedIndex(sID, sKeyValue)
function htm_SelectDeselectAll(sPrefix, sCheckBoxName, sHintSelectAll, sHintDeSelectAll)
function htm_SetDisabled(oElement, bDisabled)
function htm_SetElementProperty(sId, iProperty, sValue, iMaxLen)
function htm_ShowAllSelects(vForm)
function htm_SwitchChecked(sCheckboxName, event)
function htm_TextareaLayoutReset(sID)
function htm_TextareaLayoutSet(event)
function htm_Void(event)
function spinner_Start(sObjId, iStep, event)

*/
var aHtm_FormsToProcessSelects;
var bhtmProcessSelects;

var ohtmWaitMsg;
var ohtmClearEbox;
var ohtmClearHidden;

var sHTM_MOVEUP = "sHTM_MOVEUP";
var sHTM_MOVEUP_END = "sHTM_MOVEUP_END";
var sHTM_MOVEDOWN = "sHTM_MOVEDOWN";
var sHTM_MOVEDOWN_END = "sHTM_MOVEDOWN_END";

var sHTM_SORTSYMBOL_ASC = "\/\\"; /*"&#9650;";*/
var sHTM_SORTSYMBOL_DESC = "\\\/"; /*"&#9651;";*/
var sHTM_SORTSYMBOL_NO = "  ";

var sHTM_SORT_ASC_PREF = "sHTM_SORT_ASC_PREF";
var sHTM_SORT_DESC_PREF = "sHTM_SORT_DESC_PREF";

var iHTM_TEXTAREA_COLS_MIN = 10;
var iHTM_TEXTAREA_ROWS_EXTRA = 4;

var sHTM_SHIFT = "sHTM_SHIFT";

var sHTM_PF_NAMEISPASSED;
var sHTM_PF_IDISPASSED = "sHTM_PF_IDISPASSED";
var bHTM_SHOW = true;

var iHTM_PROP_HREF = 1;
var iHTM_PROP_ALT = 2;
var iHTM_PROP_INNERHTML = 3;
var sHTM_SEPAR_ID = ",";


function htm_Void(event)
{
  if (!event) {return;}
  
  event.cancelBubble = true;
  return;
  
  if (js_GetBrowser() == js_iBROWSER_IE) 
  {
    event.cancelBubble = true;
  }
  else
  {
    event.cancelBubble = true;
  }

}

//---------------------------------------------------------------

function htm_Nothing()
{

}


//---------------------------------------------------------------

function htm_FilterForm_Clear(oForm, sExceptionFields)
{
  sExceptionFields = s_Init(sExceptionFields, "");
  if (sExceptionFields != "") {sExceptionFields = "," + sExceptionFields + ",";}
  
  //alert(s_InStr(sExceptionFields, "," + oForm.elements[0].name + ","));return;
  
  for (i = 0; i < oForm.elements.length; i++)
  {
    if (s_InStr(sExceptionFields, "," + oForm.elements[i].name + ",") == 0) 
    {
      switch (oForm.elements[i].type) 
      {
         case "text":
          oForm.elements[i].value="";
         case "select-one" :
          oForm.elements[i].selectedIndex = 0;
         case "checkbox" :
          oForm.elements[i].checked = false;
         case "radio" :
          oForm.elements[i].checked = (oForm.elements[i].value == "") ? true : false ;
      }   
    }
  }
}


/*---------------------------------------------------------*/

function htm_GetFormElement(sElemName, vForm)
{

  sElemName = s_Init(sElemName, "");
  if (sElemName == "") {return false;}
  vForm = s_Init(vForm, "");
  if (vForm == "") {return false;}

  if (!js_IsObject(vForm)) 
  {
    vForm = document.forms[vForm];  
    if (!vForm) {return false;}  
  }

  var oObj = vForm.elements[sElemName];
  if (!oObj) {return false;}
  return oObj;
  
}


//--------------------------------------------------------------

function htm_GetElementsByName(sName, sFormName)
{
  sFormName = s_Init(sFormName, "");
  
  aArray = document.getElementsByName(sName);
  
  if (typeof(aArray) != "object") {return false;}
  if (aArray.length == 0) {return false;}
  
  if (sFormName != "") 
  {
    var aArray2 = new Array();
    var j = 0;
    
    for (i = 0; i < aArray.length; i++)
    {
      oForm = aArray[i].form;
      if (typeof(oForm) == "object") 
      {
        if ( oForm.name == sFormName)
        {
          aArray2[j] = aArray[i];
          j++;
        }
      }
    }
    if (aArray2.length == 0) {return false;}
    aArray = aArray2;
  }
  
//  alert(aArray[0].checked);

  if (aArray.length == 0) {return false;}
  if (aArray.length == 1) {return aArray[0];}
  
  return aArray;

}

//-------------------------------------------------------------

function htm_GetArrayOfElementsByID(sID)
{
  var aArray = new Array();
  j = 0;
  for (i = 0; i < document.all.length; i++)
  {
    oNextElement = document.all[i];
    if (oNextElement.id == sID)
    { 
      aArray[j] = oNextElement;
      j++;
    }
  }
  
  if (j == 0) {aArray = false;}
  
  return aArray;
}

//------------------------------------------------------------------------------

function htm_GetArrayOfElementsByName(event, sNamePrefix )
{
  var oSrc = js_GetSrcElement(event);
  var oForm = oSrc.form;
  if ( !oForm ) { return false;}


  var aArray = new Array();
  j = 0;
  for (i = 0; i < oForm.elements.length; i++)
  {
    oNextElement = oForm.elements[i];
    if ( s_IsLeft(oNextElement.name, sNamePrefix ) )
    { 
      aArray[j] = oNextElement;
      j++;
    }
  }
  
  if (j == 0) {aArray = false;}
  
  return aArray;
}

//------------------------------------------------------------------------------

function htm_GetThisElementIndexInArray_ByName(event, oThis)
{
  var oSrcElement = js_GetSrcElement(event);
  oThis = s_Init(oThis, oSrcElement);
  sName = oThis.name;
  
  var aArray;
  
  aArray = document.getElementsByName(sName);
  

  if (typeof(aArray) != "object") {return -1;}
  if (aArray.length == 0) {return -1;}
  if (aArray.length == 1) {return 0;}
  
  j = 0;
  for (i = 0; i < aArray.length; i++)
  {
    if (aArray[i] == oThis)
    {
      return j;
    }
    j++;
  }
  
  return -1;
}

//------------------------------------------------------------------------------

function htm_Select_GetSelectedIndex(sName)
{
  if (typeof(sName) == "object") 
  {
    oSelect = sName;
    return oSelect.selectedIndex;
  }
  else
  {
    return document.all[sName].selectedIndex;
  }
  
}

//------------------------------------------------------------------------------

function htm_Select_GetValue(sName)
{
  return document.all[sName].value;
}

//--------------------------------------------------------------

function htm_GetFormName(oElement)
{

  if (typeof(oElement.form) == "undefined" || oElement.form == null) {return "";}
  return oElement.form.name;

}
//------------------------------------------------------------------------------

function htm_Select_SetSelectedIndex(sID, sKeyValue)
{
// TOdO: sHTM_PF_NAMEISPASSED
  var oSelect;
  var oOptions;

  if (typeof(sID) == "object") 
  {
    oSelect = sID;
  }
  else
  {
    if (sID == "") {return;}
    oSelect = document.getElementById(sID);
  }
  

  if (!oSelect) {return;};
  
// alert(sID);
  oOptions = oSelect.options;

  
  if (oOptions.length == 0) {return;}

  for (i = 0; i < oOptions.length; i++)
  {
    if (oSelect.options[i].value == sKeyValue) 
    {
      oSelect.selectedIndex = i;
      return;
    }
  }
}

//------------------------------------------------------------------------------

function htm_Select_GetText(sName)
{
//alert(sName);
  if (typeof(sName) == "object") 
  {
    oSelect = sName;
  }
  else
  {
    oSelect = document.getElementsByName(sName)[0];
    if (!oSelect) {return false;}
  }




  if (typeof(oSelect.selectedIndex) != "undefined" && oSelect.selectedIndex >= 0)
  {
    return oSelect.options[oSelect.selectedIndex].text;
  }
  else
  {
    return "";
  }
}

//------------------------------------------------------------------------------

function htm_Focus(sForm, sElement)
{
  if (typeof(document.forms[sForm].elements[sElement]) == "undefined") {return;}
  document.forms[sForm].elements[sElement].focus();
}

//------------------------------------------------------------------------------
function htm_Clear(sEditBoxName, event)
{
  var oEditBox;
  if (typeof(ohtmClearEbox) == "object") 
  {
    oEditBox = ohtmClearEbox;
  }
  else
  {
    oClrButton = js_GetSrcElement(event);
  
    iIndex = htm_GetThisElementIndexInArray_ByName(event, oClrButton);
  
    var oEditBox = document.getElementsByName(sEditBoxName)[iIndex];
    if (!oEditBox) {return;}
  }

  oEditBox.value = "";
  if (typeof(ohtmClearHidden) == "object") 
  {
    ohtmClearHidden.value = "";
  }
  
  oEditBox = false;
  ohtmClearHidden = false;
}

//------------------------------------------------------------------------------
function htm_DeleteRow(sRowID, sConfirm) 
{
  sConfirm = s_Init(sConfirm, gsHTM_SHURETODELETE);
  if (!confirm(sConfirm)) {return;}
  var oElem = document.getElementById(sRowID);
  oElem.innerHTML = "";
  event.cancelBubble;
}
 
//------------------------------------------------------------------------------

var iAddedElements = 0;
 
function htm_AddNewRow_Table(v, h) 
{

  var target = document.getElementById(v);

  var aArray = new Array();
  
  // comment1: the next row somehow doesnt work:
  // aArray = document.getElementsByName(h);

  // so we use udf:  
  aArray = document.getElementsByName(h);

  
  if (target && aArray.length > 0) 
  {

    var row = document.createElement("TR")
    iAddedElements ++;
    row.id = "ae" + iAddedElements;
    
    var td1;
    for (i = 0; i < aArray.length; i++)
    {
      td1 = document.createElement("TD")
      
      td1.innerHTML = aArray[i].innerHTML;
      sStr = td1.innerHTML;
      if (sStr.indexOf("name=DelAddedRow", 0) > 0) 
      {
        sStr = s_Replace(sStr, 'onclick=""', 'onclick="htm_DeleteAddedRow(\'' + v + '\',\'' + row.id + '\');"');
//alert(sStr);
        td1.innerHTML = sStr;
      }
      
      
      
      row.appendChild(td1);
    }

    target.appendChild(row);
  }

} 


//--------------------------------------------------------------

function htm_DeleteAddedRow(v, iIndex, sConfirm)
{
  sConfirm = s_Init(sConfirm, gsHTM_SHURETODELETE);
  if (!confirm(sConfirm)) {return;}
  var target = document.getElementById(v);
  var child = document.getElementById(iIndex);
  target.removeChild(child);
}


//--------------------------------------------------------------

function htm_FormsToHideSelects_Add(sFormName)
{
  if (!bhtmProcessSelects) {return;}
  if (typeof(aHtm_FormsToProcessSelects) != "object")
  {
    aHtm_FormsToProcessSelects = new Array();
  }
  aHtm_FormsToProcessSelects = arr_AddNewValue (aHtm_FormsToProcessSelects, sFormName);
}

//--------------------------------------------------------------

function htm_ShowAllSelects(vForm)
{
//  alert("htm_ShowAllSelects");
  if (!bhtmProcessSelects) {return;}

  vForm = s_Init (vForm, "");
  htm_HideAllSelects(vForm, bHTM_SHOW);
}
//--------------------------------------------------------------

function htm_HideAllSelects(vForm, bShow)
{
// bShow may be bHTM_SHOW = true;
  if (!bhtmProcessSelects) {return;}

  var aForms = new Array();
  
  vForm = s_Init (vForm, "");

  if (typeof(vForm) == "string") 
  {
    if (vForm == "") 
    {
      if (is_array(aHtm_FormsToProcessSelects) && aHtm_FormsToProcessSelects.length > 0) 
      {
        aForms = arr_Equal (aHtm_FormsToProcessSelects);
      }
      else
      {
        aForms = arr_Equal (document.forms);
//      alert(document.forms);
      }
    }
    else
    {
      aForms[0] = document.forms[vForm];
    }
  }
  else
  {
    if (typeof(vForm) == "object") 
    {
      aForms[0] = vForm;
    }
  }
  
  if (aForms.length == 0) {return;}

  bShow = s_Init (bShow, false);
  
  
  for (j = 0; j < aForms.length; j++)
  {
    vForm = aForms[j];
//    alert("FORM______________" + vForm.name);
    for (i = 0; i < vForm.elements.length; i++)
    {
      oElement = vForm.elements[i];
//alert("element: " + oElement.name);
      if (s_IsLeft(oElement.type, "select") && !s_IsLeft(oElement.id, "UNVIS")) 
      {
//alert("select: " + oElement.name);
        oElement.style.visibility = bShow ? "visible" : "hidden";
      }
    }
    
  }
  
  
}

//--------------------------------------------------------------

function htm_SelectDeselectAll(event, sHintSelectAll, sHintDeSelectAll)
{
  sHintSelectAll = s_Init(sHintSelectAll, g_HTM_SELECTALL);
  sHintDeSelectAll = s_Init(sHintDeSelectAll, g_HTM_DESELECTALL);
  oSelectAll = js_GetSrcElement( event );
  if (!oSelectAll) {return;}
      
  oForm = oSelectAll.form;
  if (!oForm) {return;}

  state = oSelectAll.checked;
  oSelectAll.title = (state) ? sHintDeSelectAll : sHintSelectAll;
  var item = "";

  for (i = 0; i < oForm.elements.length; i++)
  {
    item = oForm.elements[i];
    if ( s_IsLeft(item.name, oSelectAll.name) )
    {item.checked = state; }
  }
}

//--------------------------------------------------------------

function htm_SetDisabled(oElement, bDisabled)
{
  
  if (typeof(oElement) == sSTR_UNDEF) {return;}
  
  oElement.disabled = bDisabled;
}

//--------------------------------------------------------------

function spinner_Start(sObjId, iStep, event)
{
  oObj = document.getElementById(sObjId);
  if (!oObj) {return;}
  
  iValue = (IsFloatPriv(oObj.value)) ? parseFloat(oObj.value) : 0;
  oObj.value = iValue + iStep
}

//--------------------------------------------------------------

function htm_GetElementsByPrefix(sPrefix, sFormName)
{
  sFormName = s_Init(sFormName, "");

  var aTotalArray = new Array();
  
  if (sFormName == "") 
  {
    aTotalArray = document.all;
  }
  else
  {
    oForm = document.getElementById(sFormName);
    if (!oForm) {return false;}
    
    aTotalArray = oForm.elements;
  }


  
  var aArray = new Array();
  var j = 0;
  
  for (i = 0; i < aTotalArray.length; i++)
  {
    if (typeof(aTotalArray[i].name) != "undefined" && typeof(aTotalArray[i].name) == "string") 
    {
      if (s_IsLeft (aTotalArray[i].name, sPrefix)) 
      {
        aArray[j] = aTotalArray[i];
        j++;
      }
    }
  }
  
  if (j == 0) {return false;}
  
  return aArray;
  
}

//--------------------------------------------------------------

function htm_CountChecked(sPrefix, sFormName)
{
  sFormName = s_Init(sFormName, "");
  
  if (sFormName == "") 
  {
    oElement = event.srcElement;
    if (typeof(oElement) == sSTR_UNDEF) {return -1;}
    
    oForm = oElement.form;
    if (typeof(oForm) != "object") {return -1;}
    
    if (oForm.name == "") {return -1;}
    sFormName = oForm.name;
  }  
   
  var aCheckboxes = htm_GetElementsByPrefix (sPrefix, sFormName);
  
  if (!aCheckboxes) {return -1;}
  
  var iCount = 0;
  for (i = 0; i < aCheckboxes.length; i++)
  {
    if (aCheckboxes[i].checked) {iCount++;}
  }
  return iCount;
}

//--------------------------------------------------------------

function htm_ConfirmMultiDelete(sPrefix, sFormName)
{

  sFormName = s_Init(sFormName, "");
  
  if (sFormName == "") 
  {
    oElement = event.srcElement;
    if (typeof(oElement) == sSTR_UNDEF) {return false;}
    
    oForm = oElement.form;
    if (typeof(oForm) != "object") {return false;}
    
    if (oForm.name == "") {return false;}
    sFormName = oForm.name;
  }  
  iCount = htm_CountChecked(sPrefix, sFormName);
//alert(iCount);  
  if (iCount <= 0) 
  {
    alert(g_HTM_NOONESELECTED);
    return false;
  }
  var sStr = g_HTM_SHURESELECTEDTODELETE;
  sStr = s_Replace (sStr, "#COUNT#", iCount);
  return confirm (sStr);
}

//--------------------------------------------------------------

function htm_SwitchChecked(sCheckboxName, event)
{
  oElement = js_GetSrcElement(event);

  aCheckboxes = htm_GetElementsByName(sCheckboxName);
  if (!aCheckboxes) {return;}

  
  // for FF
  if (typeof(aCheckboxes.length) == "undefined") 
  {
    aCheckboxes.checked = !aCheckboxes.checked;
    return;
  }

  for (i = 0; i < aCheckboxes.length; i++)
  {
    bDo = true;
    
    if (typeof(oElement) != sSTR_UNDEF)
    {
      if (oElement == aCheckboxes[i]) {bDo = false;}
    }
    
    if (bDo)
    {
      aCheckboxes[i].checked = !aCheckboxes[i].checked;
    }
    
  }  
}

//--------------------------------------------------------------

function htm_RemovePx(sStrWithPx)
{
  sStrWithPx = s_CutStringFromRight(sStrWithPx, "px");
  sStrWithPx = parseInt(sStrWithPx);
  return sStrWithPx;
  
}

/*---------------------------------------------------------*/

function htm_GetSrcForm(evt)
{
  oForm = js_GetSrcElement(evt);
  oForm = oForm.form;
  return oForm;
}

/*---------------------------------------------------------*/

function htm_GetRadiosetValue(sRadiosetName, sForm)
{
  aArray = htm_GetElementsByName(sRadiosetName, sForm);
  if (!aArray) {return "";}
  
  for (i = 0; i < aArray.length; i++)
  {
    if (aArray[i].checked) 
    {
      return aArray[i].value;
    }
  }

  return "";

}

/*---------------------------------------------------------*/

function htm_GetElById(sElementID, oAlterObj)
{
  if (js_IsObject(sElementID)) 
  {
    var oElem = sID;
  }
  else
  {
    var oElem = document.getElementById(sElementID);
    if (!oElem) 
    {
      if (js_IsObject(oAlterObj)) 
      {
        var oForm = oAlterObj.form;
        if (oForm) 
        {
          oElem = oForm.elements[ s_CutStringFromLeft(sElementID, "id") ]; 
        }
      }
    }
    
  }

  return oElem;
}

/*---------------------------------------------------------*/

function htm_DrawPost(sHref, sLabel, sTitle, sParams)
{
  /*
  replaces:
  ###   ->   @
  m.ru  ->   mail.ru
  var m_ru = s_Char('m') + s_Char('a') + s_Char('i') + s_Char('l') + s_Char('.') + s_Char('r') + s_Char('u');
  var terchy_com = s_Char('t') + s_Char('e') + s_Char('r') + s_Char('c') + s_Char('h') + s_Char('y') + s_Char('.') + s_Char('c') + s_Char('o') + s_Char('m');
  */

  var mto = s_Char('m') + s_Char('a') + s_Char('i') + s_Char('l') + s_Char('t') + s_Char('o') + s_Char(':');
  
  sParams = s_Init(sParams, "");
  
  sHref   = s_Replace(sHref, "?", s_GetChar(0));
  sHref   = s_Replace(sHref, "m.ru", "mail.ru");
//  sHref   = s_Replace(sHref, "t.c", terchy_com);

  sLabel  = s_Replace(sLabel, "?", s_GetChar(0) );
  sLabel  = s_Replace(sLabel, "m.ru", "mail.ru" );
//  sLabel  = s_Replace(sLabel, "t.c", terchy_com);
  sLink = "<a " + sParams + "href='" + mto + sHref + "' title='" + sTitle + "'>" + sLabel + "</a>";
//  alert(sLink);
  document.write (sLink);
  
}


/*---------------------------------------------------------*/

function htm_GetAllNodes(oParent)
{
  var aArray = oParent.childNodes;
  var aResult = new Array();
  var key;
  var i = 0;
  for (key in aArray)
  {
//alert(key + ", " + IsIntPriv(key));
    if (IsIntPriv(key)) 
    {
      aResult[i] = aArray[key];
      i++;
    }
  }
  return aResult;
}

/*---------------------------------------------------------*/

function htm_FillForm(event)
{
  var oSrc = js_GetSrcElement(event);
  var oForm = oSrc.form;
  if (!oForm) { return false;}
  
  var aArray = oForm.elements;
  var i;
  for (i=0;i<=aArray.length;i++)
  {
  
    if (typeof(oForm.elements[i].type) != "undefined") 
    {

      switch (oForm.elements[i].type)
      {
      case "checkbox":
        oForm.elements[i].checked=true;
        break;
      case "radio":
        oForm.elements[i].checked=true;
        break;
      case "select-one":
        oForm.elements[i].selectedIndex=0;
        break;
      case "text":
        oForm.elements[i].value="test";
        break;
      default:
        break;
      }
    
    }
    
  }
}

/*---------------------------------------------------------*/

function htm_Select_Option_Remove(sID, iIndex)
{
  oSelect = htm_GetElById(sID);
  if (!oSelect) {return;}
  
  if (iIndex == -1) 
  {
    oSelect.options.length = 0;
    return;
  }
  
  (oSelect.remove) ? oSelect.remove(iIndex) : oSelect.options[iIndex] = Null;
  
}

/*---------------------------------------------------------*/

function htm_Select_Option_Add (sID, sText, sValue)
{
  oSelect = htm_GetElById(sID);
  if (!oSelect) {return;}

  if (document.createElement)
  {
    var newHouseListOption = document.createElement("OPTION");
    newHouseListOption.text = sText;
    newHouseListOption.value = sValue;
    (oSelect.options.add) ? oSelect.options.add(newHouseListOption) : oSelect.add(newHouseListOption, null);
  }
  else
  {
    // для NN3.x-4.x
    var i = oSelect.options.length;
    oSelect.options[i] = new Option(sText, sValue, false, false);
  }

}

/*---------------------------------------------------------*/

function htm_Select_Option_Set (sID, sText, sValue, iIndex)
{
  oSelect = htm_GetElById(sID);
  if (!oSelect) {return;}

}

/*---------------------------------------------------------*/

function htm_Select_Option_Insert (sID, sText, sValue, iIndex)
{
  oSelect = htm_GetElById(sID);
  if (!oSelect) {return;}

  var bShift = s_GetPrefix(sText, sHTM_SHIFT);
  if (bShift) {sText = s_CutPrefix(sText, sHTM_SHIFT);}
  
  if (iIndex < 0 ) {iIndex == 0;}  
  if (iIndex > oSelect.options.length) 
  {
    iIndex = oSelect.options.length;
  }
    
  if (!bShift) 
  {
    if (iIndex < oSelect.options.length) 
    {
      htm_Select_Option_Set (oSelect, sText, sValue, iIndex);
    }
    else
    {
      htm_Select_Option_Add (oSelect, sText, sValue);
    }
    return;
  }
  
  if (iIndex == oSelect.options.length) 
  {
    htm_Select_Option_Add (oSelect, sText, sValue);
  }
  else
  {
    var i = 0;
    for (i = iIndex; i < oSelect.options.length; i++)
    {
      qqq
    }
  }


}

/*---------------------------------------------------------*/

function htm_Select_Option_Move(sID, sDirection)
{
  oSelect = htm_GetElById(sID);
  if (!oSelect) {return;}
  
  iIndex = htm_Select_GetSelectedIndex(oSelect);
  
  if (iIndex == -1) 
  {
    alert(gsHTM_SELECTEDINDEX_NOTDEF);
    return;
  }

  switch (sDirection) 
  {
    case sHTM_MOVEUP:
      iNewIndex = iIndex - 1;
      break;
//alert(iNewIndex);
    case sHTM_MOVEUP_END :
      iNewIndex = 0;
      break;
    case sHTM_MOVEDOWN :
      iNewIndex = iIndex + 1;
      break;
    case sHTM_MOVEDOWN_END :
      iNewIndex = oSelect.length - 1;
      break;
  }   
  
  if (iNewIndex == iIndex || iNewIndex < 0 || iNewIndex > (oSelect.length - 1)) {return;}
  
  sCurrLabel = oSelect.options[iIndex].text;
  sCurrValue = oSelect.options[iIndex].value;
  
  sNewLabel = oSelect.options[iNewIndex].text;
  sNewValue = oSelect.options[iNewIndex].value;
  
  oSelect.options[iIndex].text = sNewLabel;
  oSelect.options[iIndex].value = sNewValue;
  
  oSelect.options[iNewIndex].text = sCurrLabel;
  oSelect.options[iNewIndex].value = sCurrValue;
  
  oSelect.selectedIndex = iNewIndex;
}

/*---------------------------------------------------------*/

function htm_SetElementProperty(sId, iProperty, sValue, iMaxLen)
{

  oElement = htm_GetElById(sId);
  iMaxLen = s_Init(iMaxLen, 0);

  if (!oElement) {return;}
  switch (iProperty) 
  {
     case iHTM_PROP_HREF:
      oElement.href = sValue;
      break;
     case iHTM_PROP_ALT:
      oElement.alt = sValue;
      break;
     case iHTM_PROP_INNERHTML:
      if (iMaxLen > 0) {sValue = s_CutAndAddIfCutted(sValue, iMaxLen);}
      oElement.innerHTML = sValue;
      break;
  }   
}

/*---------------------------------------------------------*/

function htm_Select_Option_SortNo(sID)
{
  htm_Select_Option_Sort (sID);
}

/*---------------------------------------------------------*/

function htm_Select_Option_SortAsc(sID)
{
  htm_Select_Option_Sort (sHTM_SORT_ASC_PREF + sID);
}

/*---------------------------------------------------------*/

function htm_Select_Option_SortDesc(sID)
{
  htm_Select_Option_Sort (sHTM_SORT_DESC_PREF + sID);
}

/*---------------------------------------------------------*/

function htm_Select_Option_Sort(sID)
{
  bDesc = false;
  bAsc = false;
  bNo = false;
  
  bDesc = s_GetPrefix(sID, sHTM_SORT_DESC_PREF);
  if (bDesc) 
  {
    sID = s_CutPrefix(sID, sHTM_SORT_DESC_PREF);
  }
  
  if (!bDesc) 
  {
    bAsc = s_GetPrefix(sID, sHTM_SORT_ASC_PREF);
    if (bAsc) 
    {
      sID = s_CutPrefix(sID, sHTM_SORT_ASC_PREF);
    }
    else
    {
      bNo = true;
    }
  }

//alert(bAsc);  
  
  oSelect = htm_GetElById(sID);
  if (!oSelect) {return;}
  
  iIndex = htm_Select_GetSelectedIndex(oSelect);
  
  if (iIndex == -1) 
  {
    alert(gsHTM_SELECTEDINDEX_NOTDEF);
    return;
  }

  sCurrentValue = oSelect.options[iIndex].text;
  sCurrentValue = s_CutStringFromLeft(sCurrentValue, sHTM_SORTSYMBOL_ASC);
  sCurrentValue = s_CutStringFromLeft(sCurrentValue, sHTM_SORTSYMBOL_DESC);
  
  if (bDesc) 
  {
    sCurrentValue = sHTM_SORTSYMBOL_DESC + sCurrentValue;
  }
  else
  {
    if (bAsc) 
    {
      sCurrentValue = sHTM_SORTSYMBOL_ASC + sCurrentValue;
    }
    else
    {

    }
  }
  oSelect.options[iIndex].text = sCurrentValue;
}

/*---------------------------------------------------------*/

function htm_ChkboxChange(event, sID, sName)
{
  oSrc = js_GetSrcElement(event);
  if (!oSrc) {return;}

  var oBox = false;
  if (sID != "") 
  {
    oBox = htm_GetElById(sID);
  }
  else
  {
    if (sName != "") 
    {
      oForm = oSrc.form;
      if (!oForm) {return;}
      oBox = htm_GetFormElement(sName, oForm.name);
    }
  }

  if (!oBox) {return;}
  oBox.checked = !oBox.checked;
}

/*---------------------------------------------------------*/

function htm_GetFormByElementID (sID)
{
  aForms = document.forms;
  if (!js_IsObject(aForms) ) { return false; }
  if (aForms.length == 0 ) { return false; }
  
  var i = 0;
  var sStr = "";
  for ( i = 0; i < aForms.length; i++ )
  {
    sStr = aForms[ i ].innerHTML;
    if ( s_InStr(sStr, "id=" + sID) > 0 ) 
    {
      return aForms[ i ];
    }
  }
  return false;
}

/*---------------------------------------------------------*/

function htm_GetEl(vEventOrID)
{
  if (js_IsObject(vEventOrID)) 
  {
    return js_GetSrcElement(vEventOrID);
  }
  else
  {
    return htm_GetElById(vEventOrID);
  }

}

/*---------------------------------------------------------*/

function htm_TextareaLayoutSet(event)
{
  var oChkBox = htm_GetEl(event);
  if ( !oChkBox ) { return;}
  
  var sTextAreaID = s_CutStringFromRight ( oChkBox.id, "RowsAsIs" );
  var oTextArea = htm_GetElById(sTextAreaID, oChkBox);
  if ( !oTextArea ) { return;}

  if ( !oChkBox.checked ) 
  {
    htm_TextareaLayoutReset(oTextArea, oChkBox);
    return;
  }
  
  var aParams = s_GetTextParams (oTextArea.value);
  if (aParams) 
  {
    oTextArea.cols = Math.max( aParams[ iSTR_TEXT_MAXROWLEN ], iHTM_TEXTAREA_COLS_MIN );
    oTextArea.rows = aParams[ iSTR_TEXT_ROWS ] + iHTM_TEXTAREA_ROWS_EXTRA;
  }
}

/*---------------------------------------------------------*/

function htm_TextareaLayoutReset(oTextArea, oChkBox)
{
  sID = oTextArea.id;
  if ( sID == "" ) {sID = s_CutStringFromRight ( oChkBox.id, "RowsAsIs" );}

  if (!oTextArea) {return;}

  oStartParams = htm_GetElById(sID + "Params");
  if (!oStartParams) {return;}
  var aParams = s_Split(oStartParams.value, "-"); 
  if (!is_array(aParams)) {return;}
  oTextArea.rows = aParams[0];
  oTextArea.cols = aParams[1];
}

/*---------------------------------------------------------*/
function htm_AddCss( sSkinCode )
{
/*
var browserVer = parseInt(navigator.appVersion);
*/
  sSkinCode = s_Init( sSkinCode, "" );
  var sBrowser = navigator.appName;
  if (sBrowser.indexOf("Opera") != -1) 
  { 
    sBrowser = "op";
  }
  else
  {
    if (sBrowser.indexOf("Netscape") != -1) 
    { 
      sBrowser = "ff";
    }
    else
    {
      sBrowser = "";
    }
  }
  if ( sBrowser == "" ) { return; }

  var sCss = '<LINK TYPE="text/css" HREF="css/' + sSkinCode + '_' + sBrowser + '.css" REL="stylesheet">';
/*alert(sCss);*/
  document.writeln( sCss );

}

/*---------------------------------------------------------*/
function htm_FillBlocks( sBlocks )
{
  var key;
  var oTarget, oSource;
  
  var aBlocks = s_Split( sBlocks, sHTM_SEPAR_ID )
  if ( !is_array( aBlocks ) ) { return; }

  for (key in aBlocks)
  {
//alert( aBlocks[ key ] );
    oTarget = htm_GetElById( aBlocks[ key ] );
    if ( oTarget ) 
    {
      oSource = htm_GetElById( aBlocks[ key ] + "Source" );
      if ( oSource ) 
      {
        oTarget.innerHTML = oSource.innerHTML;
      }
    }
  }
}

