home *** CD-ROM | disk | FTP | other *** search
/ PC World 2004 December / PCWorld_2004-12_cd.bin / software / komercni / netgenium / NETGenium.msi / _B4A5F9DE730F039E0CBFC30C1A8A8467 / _B508FAD1DDAA491CB066AECB39FC85F7 (.txt) < prev    next >
Encoding:
VBScript Encoded script  |  2004-10-30  |  77.9 KB  |  2,503 lines

  1. // ----------------------------------------------------------------------------------------
  2. // --- Menu
  3. // ----------------------------------------------------------------------------------------
  4. function micl(obj) // MenuItem_OnClick
  5. {
  6.     if (selectedTable != null) selectedTable.className = "MenuItem";
  7.     selectedTable = obj;
  8.     obj.className = "SelectedMenuItem";
  9. }
  10.  
  11. function miclt(table, image) // MenuItem_OnClick_Tree
  12. {
  13.     table.style.display = jsDisplay(table.style.display == "none");
  14.     if (table.style.display == "") image.src = imMinus.src; else image.src = imPlus.src;
  15. }
  16.  
  17. function miov(obj) // MenuItem_OnMouseOver
  18. {
  19.     obj.backgroundColor_ = obj.style.backgroundColor;
  20.     obj.borderColor_ = obj.style.borderColor;
  21.     obj.style.backgroundColor = "#CCCCCC";
  22.     obj.style.borderColor = "#999999";
  23. }
  24.  
  25. function miou(obj) // MenuItem_OnMouseOut
  26. {
  27.     obj.style.backgroundColor = obj.backgroundColor_;
  28.     obj.style.borderColor = obj.borderColor_;
  29. }
  30.  
  31. function mido(obj) // MenuItem_OnMouseDown
  32. {
  33.     event.cancelBubble = true;
  34.     
  35.     obj.backgroundColor1_ = obj.style.backgroundColor;
  36.     obj.style.backgroundColor = "#999999";
  37. }
  38.  
  39. function miup(obj) // MenuItem_OnMouseUp
  40. {
  41.     obj.style.backgroundColor = obj.backgroundColor1_;
  42. }
  43.  
  44.  
  45.  
  46. // ----------------------------------------------------------------------------------------
  47. // --- Scroll
  48. // ----------------------------------------------------------------------------------------
  49. function jsAutoScroll_Vertical()
  50. {
  51.     if (event.clientY > document.body.clientHeight - 40)
  52.     {
  53.         if (document.sciy == null) document.sciy = window.setInterval("window.scrollBy(0, 4);", 5);
  54.     }
  55.     else if (event.clientY < 40)
  56.     {
  57.         if (document.sciy == null) document.sciy = window.setInterval("window.scrollBy(0, -4);", 5);
  58.     }
  59.     else if (document.sciy != null)
  60.     {
  61.         window.clearInterval(document.sciy);
  62.         document.sciy = null;
  63.     }
  64. }
  65.  
  66. function jsAutoScroll_Horizontal()
  67. {
  68.     if (event.clientX > window.document.body.clientWidth - 40)
  69.     {
  70.         if (document.scix == null) document.scix = window.setInterval("window.scrollBy(4, 0);", 5);
  71.     }
  72.     else if (event.clientX < 40)
  73.     {
  74.         if (document.scix == null) document.scix = window.setInterval("window.scrollBy(-4, 0);", 5);
  75.     }
  76.     else if (document.scix != null)
  77.     {
  78.         window.clearInterval(document.scix);
  79.         document.scix = null;
  80.     }
  81. }
  82.  
  83.  
  84.  
  85. // ----------------------------------------------------------------------------------------
  86. // --- Display, Visibility
  87. // ----------------------------------------------------------------------------------------
  88. function jsDisplay(value)
  89. {
  90.     if (value) return ""; else return "none";
  91. }
  92.  
  93. function jsVisibility(value)
  94. {
  95.     if (value) return "visible"; else return "hidden";
  96. }
  97.  
  98.  
  99.  
  100. // ----------------------------------------------------------------------------------------
  101. // --- Errors
  102. // ----------------------------------------------------------------------------------------
  103. function jsError(text)
  104. {
  105.     if (document.readyState != "complete")
  106.     {
  107.         document.NG_error = text;
  108.         setTimeout("jsError(document.NG_error);", 100);
  109.     }
  110.     else alert(text);
  111. }
  112.  
  113.  
  114.  
  115. // ----------------------------------------------------------------------------------------
  116. // --- TextBox
  117. // ----------------------------------------------------------------------------------------
  118. function tb_Print(bt, tb, hl, office)
  119. {
  120.     if (tb.value == "TRUE")
  121.     {
  122.         tb.value = "";
  123.         if (office)
  124.         {
  125.             for (var i = 0; i < document.forms[0].length; i++)
  126.                 if (document.forms[0].item(i).tagName == "INPUT" && document.forms[0].item(i).onclick != null && document.forms[0].item(i).onclick.toString().indexOf(bt.id + ".click();") != -1)
  127.                 {
  128.                     bt = document.forms[0].item(i);
  129.                     break;
  130.                 }
  131.             
  132.             document.NG_printText = bt.value;
  133.             bt.value = pleaseWait;
  134.             bt.disabled = true;
  135.             
  136.             var width = bt.style.width;
  137.             bt.style.width = "140px";
  138.             
  139.             setTimeout("var bt = document.forms[0]." + bt.id + "; bt.value = document.NG_printText; bt.disabled = false; bt.style.width = '" + width + "';", 20000);
  140.             hl.click();
  141.         }
  142.         else
  143.         {
  144.             window.showModalDialog(hl.href, "", "dialogHeight:" + screen.availHeight + "px; dialogLeft:0px; dialogTop:0; dialogWidth:" + screen.availWidth + "px;");
  145.         }
  146.     }
  147. }
  148.  
  149.  
  150.  
  151. // ----------------------------------------------------------------------------------------
  152. // --- DropDownList
  153. // ----------------------------------------------------------------------------------------
  154. function ddl_SelectedItem_Text(ddl)
  155. {
  156.     var i = ddl.selectedIndex;
  157.     if (i == -1) return "";
  158.     return ddl.options(i).text;
  159. }
  160.  
  161. function ddl_SelectedItem_Value(ddl)
  162. {
  163.     var i = ddl.selectedIndex;
  164.     if (i == -1) return "";
  165.     return ddl.options(i).value;
  166. }
  167.  
  168. function ddl_SelectText(ddl, text)
  169. {
  170.     for (i = 0; i < ddl.options.length; i++)
  171.         if (ddl.options(i).text == text)
  172.         {
  173.             ddl.options(i).selected = true;
  174.             ddl.fireEvent("onchange");
  175.             break;
  176.         }
  177. }
  178.  
  179. function ddl_SelectText_NoChange(ddl, text)
  180. {
  181.     for (i = 0; i < ddl.options.length; i++)
  182.         if (ddl.options(i).text == text)
  183.         {
  184.             ddl.options(i).selected = true;
  185.             break;
  186.         }
  187. }
  188.  
  189. function ddl_SelectValue(ddl, text)
  190. {
  191.     for (i = 0; i < ddl.options.length; i++)
  192.         if (ddl.options(i).value == text)
  193.         {
  194.             ddl.options(i).selected = true;
  195.             ddl.fireEvent("onchange");
  196.             break;
  197.         }
  198. }
  199.  
  200. function ddl_SelectValue_NoChange(ddl, text)
  201. {
  202.     for (i = 0; i < ddl.options.length; i++)
  203.         if (ddl.options(i).value == text)
  204.         {
  205.             ddl.options(i).selected = true;
  206.             break;
  207.         }
  208. }
  209.  
  210. function ddl_Init(ddl)
  211. {
  212.     ddl.search = "";
  213.     ddl.searchIndex = 0;
  214.     ddl.selectedIndex_ = ddl.selectedIndex;
  215. }
  216.  
  217. function ddl_Search(ddl, foo)
  218. {
  219.     if (event.keyCode == 13) ddl.fireEvent("onchange");
  220.     else if (event.keyCode == 27) ddl.selectedIndex = ddl.selectedIndex_;
  221.     else
  222.     {
  223.         var next = event.keyCode == 32;
  224.         var s = ddl.search + (next ? "" : String.fromCharCode(event.keyCode).toLowerCase());
  225.         if (s == "") return false;
  226.         
  227.         for (var i = ddl.searchIndex; i < ddl.options.length; i++)
  228.             if (ddl.options(i).text.toLowerCase().indexOf(s) == 0)
  229.             {
  230.                 if (i == ddl.searchIndex && next) continue;
  231.                 
  232.                 ddl.options(ddl.searchIndex = i).selected = true;
  233.                 ddl.search = s;
  234.                 next = false;
  235.                 break;
  236.             }
  237.         
  238.         if (next && foo == null)
  239.         {
  240.             ddl.searchIndex = 0;
  241.             ddl_Search(ddl, true);
  242.         }
  243.     }
  244.     return false;
  245. }
  246.  
  247. function ddl_Copy(source, destination, selectValue)
  248. {
  249.     if (destination == null) return; // DropDownList is not visible
  250.     selectValue = selectValue && destination.sv != null;
  251.     
  252.     var index = -1;
  253.     for (var i = 0; i < source.options.length; i++)
  254.     {
  255.         var o = document.createElement("OPTION");
  256.         destination.options.add(o);
  257.         o.text = source.options(i).text;
  258.         o.value = source.options(i).value;
  259.         
  260.         if (selectValue && o.value == destination.sv && index == -1)
  261.         {
  262.             index = i;
  263.             o.selected = true;
  264.         }
  265.     }
  266. }
  267.  
  268.  
  269.  
  270. // ----------------------------------------------------------------------------------------
  271. // --- ListBox
  272. // ----------------------------------------------------------------------------------------
  273. function lb_Items_Load(lb1, lb1_sv, lb2, lb2_sv, tb, lb, ANEI, column2)
  274. {
  275.     var s = new Array();
  276.     if (tb.value != "") s = tb.value.split("    ");
  277.     
  278.     if (ANEI)
  279.         for (var i = 0; i < s.length; i++)
  280.         {
  281.             var ok = false;
  282.             for (var j = 0; j < lb.options.length; j++)
  283.                 if (lb.options(j).value == s[i])
  284.                 {
  285.                     ok = true;
  286.                     break;
  287.                 }
  288.             if (!ok)
  289.             {
  290.                 var o = document.createElement("OPTION");
  291.                 lb.options.add(o);
  292.                 o.innerText = s[i];
  293.                 o.value = s[i];
  294.             }
  295.         }
  296.     
  297.     if (lb1 == null) // DenyMove
  298.     {
  299.         for (var i = 0; i < s.length; i++)
  300.             for (var j = 0; j < lb.options.length; j++)
  301.                 if (lb.options(j).value == s[i])
  302.                 {
  303.                     var o = document.createElement("OPTION");
  304.                     lb2.options.add(o);
  305.                     o.text = lb.options(j).text;
  306.                     o.value = lb.options(j).value;
  307.                     break;
  308.                 }
  309.     }
  310.     else
  311.     {
  312.         ddl_Copy(lb, lb1);
  313.         
  314.         for (var i = 0; i < s.length; i++)
  315.             for (var j = 0; j < lb1.options.length; j++)
  316.                 if (lb1.options(j).value == s[i])
  317.                 {
  318.                     var o = document.createElement("OPTION");
  319.                     lb2.options.add(o);
  320.                     o.text = lb1.options(j).text;
  321.                     o.value = lb1.options(j).value;
  322.                     
  323.                     if (!(column2 && s[i] == "2"))
  324.                     {
  325.                         lb1.options.remove(j);
  326.                     }
  327.                     
  328.                     break;
  329.                 }
  330.         
  331.         ddl_SelectValue_NoChange(lb1, lb1_sv);
  332.     }
  333.     
  334.     ddl_SelectValue_NoChange(lb2, lb2_sv);
  335. }
  336.  
  337. function lb_Items_Move(source, destination, column2, back, lb)
  338. {
  339.     var result = false;
  340.     var select = -1;
  341.     for (var i = 0; i < source.options.length; i++)
  342.         if (source.options(i).selected)
  343.         {
  344.             if (destination.max != null && destination.max == destination.options.length)
  345.             {
  346.                 alert(destination.errorMessage);
  347.                 break;
  348.             }
  349.             
  350.             if (!(source.options(i).value == "2" && column2 && back))
  351.             {
  352.                 result = true;
  353.                 var oOption = document.createElement("OPTION");
  354.                 
  355.                 var index = destination.options.length;
  356.                 if (lb != null)
  357.                     for (var j = 0; j < lb.options.length; j++)
  358.                         if (source.options(i).value == lb.options(j).value)
  359.                         {
  360.                             index = j;
  361.                             break;
  362.                         }
  363.                 
  364.                 destination.options.add(oOption, index);
  365.                 oOption.text = source.options(i).text;
  366.                 oOption.value = source.options(i).value;
  367.             }
  368.             
  369.             if (!(source.options(i).value == "2" && column2 && !back))
  370.             {
  371.                 result = true;
  372.                 source.options.remove(i);
  373.                 select = i;
  374.                 i--;
  375.             }
  376.         }
  377.         
  378.     if (select != -1 && source.options.length != 0)
  379.     {
  380.         if (select == source.options.length) select--;
  381.         source.options(select).selected = true;
  382.     }
  383.     
  384.     return result;
  385. }
  386.  
  387. function lb_Items_Delete(lb)
  388. {
  389.     var select = -1;
  390.     for (var i = 0; i < lb.options.length; i++)
  391.         if (lb.options(i).selected)
  392.         {
  393.             lb.options.remove(i);
  394.             select = i;
  395.             i--;
  396.         }
  397.         
  398.     if (select != -1 && lb.options.length != 0)
  399.     {
  400.         if (select == lb.options.length) select--;
  401.         lb.options(select).selected = true;
  402.     }
  403. }
  404.  
  405. function lb_Items_MoveUp(lb)
  406. {
  407.     var i = lb.selectedIndex;
  408.     if (i == -1 || i == 0) return;
  409.     
  410.     var t = lb.options[i - 1].text;
  411.     var v = lb.options[i - 1].value;
  412.     
  413.     lb.options[i - 1].text = lb.options[i].text;
  414.     lb.options[i - 1].value = lb.options[i].value;
  415.     
  416.     lb.options[i].text = t;
  417.     lb.options[i].value = v;
  418.     
  419.     lb.selectedIndex = i - 1;
  420. }
  421.  
  422. function lb_Items_MoveDown(lb)
  423. {
  424.     var i = lb.selectedIndex;
  425.     if (i == -1 || i == lb.options.length - 1) return;
  426.     
  427.     var t = lb.options[i + 1].text;
  428.     var v = lb.options[i + 1].value;
  429.     
  430.     lb.options[i + 1].text = lb.options[i].text;
  431.     lb.options[i + 1].value = lb.options[i].value;
  432.     
  433.     lb.options[i].text = t;
  434.     lb.options[i].value = v;
  435.     
  436.     lb.selectedIndex = i + 1;
  437. }
  438.  
  439. function lb_Items_JoinValues(lb)
  440. {
  441.     var s = new Array();
  442.     for (var i = 0; i < lb.options.length; i++) s[i] = lb.options(i).value;
  443.     return s.join("    ");
  444. }
  445.  
  446. function lb_Items_JoinTexts(lb)
  447. {
  448.     var s = new Array();
  449.     for (var i = 0; i < lb.options.length; i++) s[i] = lb.options(i).text;
  450.     return s.join("    ");
  451. }
  452.  
  453.  
  454.  
  455. // ----------------------------------------------------------------------------------------
  456. // --- Radio
  457. // ----------------------------------------------------------------------------------------
  458. function rbl_SelectedItem_Value(rbl)
  459. {
  460.     if (rbl.length > 0)
  461.     {
  462.         for (var i = 0; i < rbl.length; i++) if (rbl[i].checked) return rbl[i].value;
  463.     }
  464.     else
  465.     {
  466.         var o = rbl;
  467.         while (o.tagName != "BODY") o = o.parentElement; // opener...
  468.         // IE 5.5: rbl.ownerDocument
  469.         
  470.         for (var i = 0; i < rbl.rows.length; i++)
  471.         {
  472.             if (o.all[rbl.id + "_" + i].checked) return rbl.rows(i).cells(0).all(1).innerText;
  473.         }
  474.     }
  475.     return "";
  476. }
  477.  
  478. function rbl_SelectValue(rbl, text)
  479. {
  480.     var o = rbl;
  481.     while (o.tagName != "BODY") o = o.parentElement; // opener...
  482.     // IE 5.5: rbl.ownerDocument
  483.     
  484.     for (i = 0; i < rbl.rows.length; i++)
  485.         if (rbl.rows(i).cells(0).all(1).innerText == text)
  486.         {
  487.             o.all[rbl.id + "_" + i].checked = true;
  488.             break;
  489.         }
  490. }
  491.  
  492.  
  493.  
  494. // ----------------------------------------------------------------------------------------
  495. // --- Button
  496. // ----------------------------------------------------------------------------------------
  497. function bt_FindByText(text, index)
  498. {
  499.     var n = 0;
  500.     for (var i = 0; i < document.forms[0].length; i++)
  501.         if (document.forms[0].item(i).tagName == "INPUT" && document.forms[0].item(i).value == text)
  502.         {
  503.             if (index != null && n != index) { n++; continue; }
  504.             return document.forms[0].item(i);
  505.         }
  506.     return null;
  507. }
  508.  
  509.  
  510.  
  511. // ----------------------------------------------------------------------------------------
  512. // --- Global
  513. // ----------------------------------------------------------------------------------------
  514. function jsQuot()
  515. {
  516.     return "'";
  517. }
  518.  
  519. function jsDQuot()
  520. {
  521.     return '"';
  522. }
  523.  
  524. function DPH(tbCena, ddlSazbaDPH)
  525. {
  526.     var cena = jsNumber(tbCena.value);
  527.     var dph = new Number(cena * ddl_SelectedItem_Value(ddlSazbaDPH) / 100);
  528.     return jsFormatNumber(Math.ceil(dph));
  529. }
  530.  
  531. function CenaSDPH(tbCena, ddlSazbaDPH)
  532. {
  533.     var cena = jsNumber(tbCena.value);
  534.     var dph = new Number(cena * ddl_SelectedItem_Value(ddlSazbaDPH) / 100);
  535.     return jsFormatNumber(Math.ceil(cena + dph));
  536. }
  537.  
  538. function jsFullName(tbTitle, tbName, tbSurname)
  539. {
  540.     var s = "";
  541.     if (tbTitle.value != "") s += tbTitle.value + " ";
  542.     if (tbName.value != "") s += tbName.value + " ";
  543.     return s + tbSurname.value;
  544. }
  545.  
  546.  
  547.  
  548. // ----------------------------------------------------------------------------------------
  549. // --- Windows
  550. // ----------------------------------------------------------------------------------------
  551. function jsOpen(url, par, xy)
  552. {
  553.     if (par == null) par = "width = 300, height = 100, status = no"; // without window borders... (3px window, 2px body, body, 2px body, 3px window)
  554.     if (xy != null && xy)
  555.     {
  556.         par += ", left = " + (event.screenX + 18) + ", top = " + (event.screenY - 10);
  557.     }
  558.     if (par.indexOf("left") == -1)
  559.     {
  560.         par += ", left = " + (window.top.screenLeft + 50) + ", top = ";
  561.         if (opener == null) par += "40"; else par += window.top.screenTop + 11;
  562.     }
  563.     
  564.     var obj = window.open(url, "", par);
  565.     obj.focus();
  566. }
  567.  
  568. function jsOpenDialog(url, par)
  569. {
  570.     return window.showModalDialog(url, par, "help:no; scroll:no; status:no; dialogWidth:306px; dialogHeight:127px;"); // including window borders... (300x95 without borders)
  571. }
  572.  
  573. function alert(text, type, top)
  574. {
  575.     jsOpenDialog(root + "Alert.aspx?type=" + type + "&top=" + top, text);
  576. }
  577.  
  578. function alertdiv(text)
  579. {
  580.     jsOpenDialog(root + "AlertDiv.aspx", text);
  581. }
  582.  
  583. function confirm(text, type)
  584. {
  585.     return jsOpenDialog(root + "Confirm.aspx?type=" + type, text);
  586. }
  587.  
  588. function jsWait()
  589. {
  590.     try { parent.main.document.location = root + "__Wait.htm"; }
  591.     catch (e) {}
  592. }
  593.  
  594. function jsWait2(url)
  595. {
  596.     for (var i = 0; i < document.forms[0].length; i++)
  597.         if (document.forms[0].item(i).tagName == "SELECT")
  598.         {
  599.             document.forms[0].item(i).style.visibility = "hidden";
  600.         }
  601.     
  602.     document.body.leftMargin = document.body.rightMargin = document.body.topMargin = document.body.bottomMargin = 0;
  603.     document.body.scroll = "no";
  604.     document.body.insertAdjacentHTML("afterBegin", '<div style="position: absolute; top: ' + document.body.scrollTop + 'px; left:' + document.body.scrollLeft + 'px; width: ' + document.body.clientWidth + '; height: ' + document.body.clientHeight + '; z-index: 10000; background-color: white"><table id=tblwait cellSpacing=0 cellPadding=0 width=300 border=0 style="position: absolute;"><tr><td style="font-size: 5px; filter: progid:dximagetransform.microsoft.gradient(gradienttype=1,startcolorstr=#ffffff,endcolorstr=' + barColor + ');"> </td><td style="font-size: 5px; filter: progid:dximagetransform.microsoft.gradient(gradienttype=1,startcolorstr=' + barColor + ',endcolorstr=#ffffff);"> </td></tr></table><span style="position: absolute; top: 14px; left: 10px; font-size: 10px; font-family: Verdana; color: #333333;">' + pleaseWait + '</span></div>');
  605.     setInterval("jsWait2_Move()", 10);
  606.     
  607.     if (url != null) location = url;
  608. }
  609.  
  610. function jsWait2_Move()
  611. {
  612.     var n = tblwait.offsetLeft + 2;
  613.     if (n > document.body.clientWidth) n = - tblwait.offsetWidth;
  614.     tblwait.style.left = n;
  615. }
  616.  
  617. function jsRefresh(obj, refresh)
  618. {
  619.     var refresh_ = false;
  620.     var s = obj.location.toString().split("?");
  621.     var P = "";
  622.     if (s[1] != null)
  623.     {
  624.         var p = s[1].split("&");
  625.         for (var i = 0; i < p.length; i++)
  626.         {
  627.             var variable = p[i].split("=")[0];
  628.             if (variable == "refresh") refresh_ = true;
  629.             if (variable != "scrollX" && variable != "scrollY")
  630.             {
  631.                 if (P != "") P += "&";
  632.                 P += p[i];
  633.             }
  634.         }
  635.     }
  636.     
  637.     // Scroll
  638.     if (P != "") P += "&";
  639.     P += "scrollX=" + obj.document.body.scrollLeft + "&scrollY=" + obj.document.body.scrollTop;
  640.     
  641.     // Refresh
  642.     if (refresh != null && refresh && !refresh_) P += "&refresh=";
  643.     
  644.     // Redirect
  645.     obj.location = s[0] + "?" + P;
  646. }
  647.  
  648. function jsResizeWindow(w, h, leftMargin, rightMargin, topMargin, bottomMargin, center, dialog)
  649. {
  650.     if (!dialog && opener == null) return;
  651.     
  652.     document.body.leftMargin = leftMargin;
  653.     document.body.rightMargin = rightMargin;
  654.     document.body.topMargin = topMargin;
  655.     document.body.bottomMargin = bottomMargin;
  656.     
  657.     var maxW = screen.availWidth - (window.screenLeft - 3);
  658.     var maxH = screen.availHeight - (window.screenTop - 22); // title bar: XP 29px, 2000 22px
  659.     var newW = 3 + leftMargin + w + rightMargin + 3; // 3px window border, body, 3px window border
  660.     var newH = 22 + topMargin + h + bottomMargin + 3; // 22px title bar + body + 3px window border
  661.  
  662.     if (!dialog)
  663.     {
  664.         newW += 4; // 2x 2px body border
  665.         newH += 4; // 2x 2px body border
  666.         
  667.         try { if (opener != null) newH += jsNumber(opener.top.document.xptheme) + jsNumber(opener.top.document.xpsp2); }
  668.         catch (e) {} // Opener is closed...
  669.         
  670.         if (newW > maxW) newH += 17; // scrollbar
  671.         if (newH > maxH) newW += 17; // scrollbar
  672.         
  673.         if (newW > maxW && newW < screen.availWidth)
  674.         {
  675.             window.moveBy(maxW - newW, 0);
  676.             jsResizeWindow(w, h, leftMargin, rightMargin, topMargin, bottomMargin, center, dialog);
  677.             return;
  678.         }
  679.         
  680.         if (newH > maxH && newH < screen.availHeight)
  681.         {
  682.             window.moveBy(0, maxH - newH);
  683.             jsResizeWindow(w, h, leftMargin, rightMargin, topMargin, bottomMargin, center, dialog);
  684.             return;
  685.         }
  686.         
  687.         if (newW > maxW || newH > maxH)
  688.         {
  689.             document.body.scroll = "yes";
  690.             if (newW > maxW) newW = maxW;
  691.             if (newH > maxH) newH = maxH;
  692.         }
  693.         else
  694.         {
  695.             document.body.scroll = "no";
  696.         }
  697.         
  698.         try
  699.         {
  700.             window.resizeTo(newW, newH);
  701.             
  702.             var dif = document.body.scrollHeight - document.body.clientHeight, h2 = newH;
  703.             if (dif == 7 || dif == 30) // XP theme
  704.             {
  705.                 newH += 7;
  706.                 
  707.                 try { if (opener != null) opener.top.document.xptheme = 7; }
  708.                 catch (e) {} // Opener is closed...
  709.             }
  710.             if (dif == 20 || dif == 30) // Status bar (Windows XP Service Pack 2)
  711.             {
  712.                 newH += dif == 20 ? 20 : 23;
  713.                 
  714.                 try { if (opener != null) opener.top.document.xpsp2 = dif == 20 ? 20 : 23; }
  715.                 catch (e) {} // Opener is closed...
  716.             }
  717.             if (h2 != newH) window.resizeTo(newW, newH);
  718.         }
  719.         catch (e) {} // Security...
  720.         
  721.         if (center) window.moveTo((screen.availWidth - newW) / 2, (screen.availHeight - newH) / 2);
  722.     }
  723.     else
  724.     {
  725.         window.dialogWidth = newW + "px"; // including window borders
  726.         window.dialogHeight = newH + "px"; // including window borders
  727.         
  728.         var dif = document.body.scrollHeight - document.body.clientHeight, h2 = newH;
  729.         if (dif == 7 || dif == 27) // XP theme
  730.         {
  731.             newH += 7;
  732.         }
  733.         if (dif == 20 || dif == 27) // Status bar (Windows XP Service Pack 2)
  734.         {
  735.             newH += 20;
  736.         }
  737.         if (h2 != newH) window.dialogHeight = newH + "px";
  738.         
  739.         if (center)
  740.         {
  741.             window.dialogLeft = ((screen.width - newW) / 2) + "px";
  742.             window.dialogTop = ((screen.height - newH) / 2) + "px";
  743.         }
  744.     }
  745. }
  746.  
  747.  
  748.  
  749. // ----------------------------------------------------------------------------------------
  750. // --- Parser: Numbers - dot as DecimalSeparator (.)
  751. // ----------------------------------------------------------------------------------------
  752. function jsNumber(value)
  753. {
  754.     if (value == null) return 0;
  755.     value = value.toString().replace(",", ".");
  756.     if (value == "") return 0;
  757.     if (value > -1000000000000 && value < 1000000000000) return new Number(value); else return 0;
  758. }
  759.  
  760. function jsIsNumber(value)
  761. {
  762.     if (value == null) return false;
  763.     value = value.toString().replace(",", ".");
  764.     return value > -1000000000000 && value < 1000000000000;
  765. }
  766.  
  767. function jsFormatNumber(n)
  768. {
  769.     return n.toString().replace(".", ",");
  770. }
  771.  
  772.  
  773.  
  774. // ----------------------------------------------------------------------------------------
  775. // --- Parser
  776. // ----------------------------------------------------------------------------------------
  777. function ZInt(n)
  778. {
  779.     if (n < 10) return "0" + n; else return n;
  780. }
  781.  
  782. function Hex(n)
  783. {
  784.     if (new Number(n) < 16) return "0" + new Number(n).toString(16); else return new Number(n).toString(16);
  785. }
  786.  
  787. function Time2Int(text)
  788. {
  789.     if (text.indexOf(":") == -1) return 0;
  790.     
  791.     var n = Math.abs(jsNumber(text.split(":")[0])) * 60 + jsNumber(text.split(":")[1]);
  792.     if (text.indexOf("-") == 0) n = - n;
  793.     return n;
  794. }
  795.  
  796. function Int2Time(n)
  797. {
  798.     var s = ZInt(Math.floor(Math.abs(n) / 60)) + ":" + ZInt(Math.abs(n) % 60);
  799.     if (n < 0) s = "-" + s;
  800.     return s;
  801. }
  802.  
  803. function Str2Date(text)
  804. {
  805.     if (text == "") return new Date();
  806.     var s = text.split(" ");
  807.     var day = 0;
  808.     var month = 0;
  809.     var year = 0;
  810.     var hour = 0;
  811.     var minute = 0;
  812.     
  813.     var d = s[0].split(".");
  814.     if (d.length == 3)
  815.     {
  816.         day = jsNumber(d[0]);
  817.         month = jsNumber(d[1]);
  818.         year = jsNumber(d[2]);
  819.     }
  820.     else
  821.     {
  822.         d = s[0].split("/");
  823.         if (d.length == 3)
  824.         {
  825.             day = jsNumber(d[1]);
  826.             month = jsNumber(d[0]);
  827.             year = jsNumber(d[2]);
  828.         }
  829.     }
  830.     
  831.     if (day == 0 || month == 0 || year == 0) return new Date();
  832.     
  833.     if (s.length == 2)
  834.     {
  835.         s = s[1].split(":");
  836.         if (s.length == 2) return new Date(year, month - 1, day, jsNumber(s[0]), jsNumber(s[1]));
  837.     }
  838.     
  839.     return new Date(year, month - 1, day);
  840. }
  841.  
  842. function Date2Str(date)
  843. {
  844.     var s = ZInt(date.getDate()) + "." + ZInt(date.getMonth() + 1) + "." + date.getFullYear() + " " + ZInt(date.getHours()) + ":" + ZInt(date.getMinutes());
  845.     return s.replace(" 00:00", "");
  846. }
  847.  
  848. function Now()
  849. {
  850.     var date = new Date();
  851.     return  ZInt(date.getDate()) + "." + ZInt(date.getMonth() + 1) + "." + date.getFullYear() + " " + ZInt(date.getHours()) + ":" + ZInt(date.getMinutes());
  852. }
  853.  
  854. function InsertTime(tb)
  855. {
  856.     var d = new Date();
  857.     tb.value = ZInt(d.getHours()) + ":" + ZInt(d.getMinutes());
  858. }
  859.  
  860. function Color2Hex(text)
  861. {
  862.     var s = text.split(",");
  863.     if (s.length != 3) return "#ffffff";
  864.     return "#" + Hex(jsNumber(s[0])) + Hex(jsNumber(s[1])) + Hex(jsNumber(s[2]));
  865. }
  866.  
  867.  
  868.  
  869. // ----------------------------------------------------------------------------------------
  870. // --- Cookies
  871. // ----------------------------------------------------------------------------------------
  872. function jsGetCookie(name)
  873. {
  874.     var c = document.cookie.split("; ");
  875.     for (var i = 0; i < c.length; i++)
  876.     {
  877.         if (c[i].split("=")[0] == name) return c[i].split("=")[1];
  878.     }
  879.     return "";
  880. }
  881.  
  882. function jsSetCookie(name, value)
  883. {
  884.     var expire = new Date();
  885.     expire.setMonth(expire.getMonth() + 6);
  886.     document.cookie = name + "=" + value + ";expires=" + expire.toGMTString();
  887. }
  888.  
  889. function jsNetGeniumStart(text)
  890. {
  891.     return jsGetCookie("ng" + text);
  892. }
  893.  
  894.  
  895.  
  896. // ----------------------------------------------------------------------------------------
  897. // --- FormPicker
  898. // ----------------------------------------------------------------------------------------
  899. function jsFilterApps_FormPicker(ddlAppGroups, ddlApps, ddlTables, btGo)
  900. {
  901.     var strAppGroup = ddl_SelectedItem_Value(ddlAppGroups);
  902.     var strApp = ddl_SelectedItem_Value(ddlApps);
  903.     while (ddlApps.options.length != 0) ddlApps.options.remove(0);
  904.     
  905.     for (i = 0; i < jsAppGroup.length; i++)
  906.         if (jsAppGroup[i] == strAppGroup)
  907.         {
  908.             var s1 = null;
  909.             var s2 = null;
  910.             if (jsAppsID[i] != "")
  911.             {
  912.                 s1 = jsAppsID[i].split(";");
  913.                 s2 = jsAppsName[i].split(";");
  914.             }
  915.             
  916.             if (s1 != null)
  917.                 for (j = 0; j < s1.length; j++)
  918.                 {
  919.                     var oOption = document.createElement("OPTION");
  920.                     ddlApps.options.add(oOption);
  921.                     oOption.value = s1[j];
  922.                     oOption.innerText = s2[j];
  923.                 }
  924.             ddl_SelectValue(ddlApps, strApp);
  925.             
  926.             break;
  927.         }
  928.     
  929.     jsFilterTables_FormPicker(ddlApps, ddlTables, btGo);
  930. }
  931.  
  932. function jsFilterTables_FormPicker(ddlApps, ddlTables, btGo)
  933. {
  934.     var strApp = ddl_SelectedItem_Value(ddlApps);
  935.     var strTable = ddl_SelectedItem_Value(ddlTables);
  936.     while (ddlTables.options.length != 0) ddlTables.options.remove(0);
  937.     
  938.     for (i = 0; i < jsApp.length; i++)
  939.         if (jsApp[i] == strApp)
  940.         {
  941.             var s1 = null;
  942.             var s2 = null;
  943.             if (jsTablesID[i] != "")
  944.             {
  945.                 s1 = jsTablesID[i].split(";");
  946.                 s2 = jsTablesName[i].split(";");
  947.             }
  948.             
  949.             if (s1 != null)
  950.                 for (j = 0; j < s1.length; j++)
  951.                 {
  952.                     var oOption = document.createElement("OPTION");
  953.                     ddlTables.options.add(oOption);
  954.                     oOption.value = s1[j];
  955.                     oOption.innerText = s2[j];
  956.                 }
  957.             ddl_SelectValue(ddlTables, strTable);
  958.  
  959.             break;
  960.         }
  961.     
  962.     if (btGo != null) btGo.disabled = ddlTables.selectedIndex == -1;
  963. }
  964.  
  965.  
  966.  
  967. // ----------------------------------------------------------------------------------------
  968. // --- CategoryPicker, AppPicker
  969. // ----------------------------------------------------------------------------------------
  970. function jsFilterApps_CategoryPicker(ddlAppGroups, ddlApps, ddlCategories)
  971. {
  972.     var strAppGroup = ddl_SelectedItem_Value(ddlAppGroups);
  973.     var strApp = ddl_SelectedItem_Value(ddlApps);
  974.     while (ddlApps.options.length != 0) ddlApps.options.remove(0);
  975.     
  976.     for (i = 0; i < jsAppGroup.length; i++)
  977.         if (jsAppGroup[i] == strAppGroup)
  978.         {
  979.             var s1 = null;
  980.             var s2 = null;
  981.             if (jsAppsID[i] != "")
  982.             {
  983.                 s1 = jsAppsID[i].split(";");
  984.                 s2 = jsAppsName[i].split(";");
  985.             }
  986.             
  987.             if (s1 != null)
  988.                 for (j = 0; j < s1.length; j++)
  989.                 {
  990.                     var oOption = document.createElement("OPTION");
  991.                     ddlApps.options.add(oOption);
  992.                     oOption.value = s1[j];
  993.                     oOption.innerText = s2[j];
  994.                 }
  995.             ddl_SelectValue(ddlApps, strApp);
  996.             
  997.             break;
  998.         }
  999.     
  1000.     if (ddlCategories != null) jsFilterCategories_CategoryPicker(ddlApps, ddlCategories);
  1001. }
  1002.  
  1003. function jsFilterCategories_CategoryPicker(ddlApps, ddlCategories)
  1004. {
  1005.     var strApp = ddl_SelectedItem_Value(ddlApps);
  1006.     var strCategory = ddl_SelectedItem_Value(ddlCategories);
  1007.     while (ddlCategories.options.length != 1) ddlCategories.options.remove(1); // First item = (Root)
  1008.     
  1009.     for (i = 0; i < jsApp.length; i++)
  1010.         if (jsApp[i] == strApp)
  1011.         {
  1012.             var s1 = null;
  1013.             var s2 = null;
  1014.             if (jsCategoriesID[i] != "")
  1015.             {
  1016.                 s1 = jsCategoriesID[i].split(";");
  1017.                 s2 = jsCategoriesName[i].split(";");
  1018.             }
  1019.             
  1020.             if (s1 != null)
  1021.                 for (j = 0; j < s1.length; j++)
  1022.                 {
  1023.                     var oOption = document.createElement("OPTION");
  1024.                     ddlCategories.options.add(oOption);
  1025.                     oOption.value = s1[j];
  1026.                     oOption.innerText = s2[j];
  1027.                 }
  1028.             ddl_SelectValue(ddlCategories, strCategory);
  1029.  
  1030.             break;
  1031.         }
  1032. }
  1033.  
  1034.  
  1035.  
  1036. // ----------------------------------------------------------------------------------------
  1037. // --- ViewPagePicker, ViewFieldPicker
  1038. // ----------------------------------------------------------------------------------------
  1039. function jsFilterApps_ViewPagePicker(lbAppGroups, lbApps, lbViewPages, lbViewFields, lbListBox2)
  1040. {
  1041.     if (lbAppGroups.selectedIndex == -1 && lbAppGroups.options.length != 0) lbAppGroups.options(0).selected = true;
  1042.     
  1043.     var strAppGroup = ddl_SelectedItem_Value(lbAppGroups);
  1044.     var strApp = ddl_SelectedItem_Value(lbApps);
  1045.     while (lbApps.options.length != 0) lbApps.options.remove(0);
  1046.     
  1047.     for (i = 0; i < jsAppGroup.length; i++)
  1048.         if (jsAppGroup[i] == strAppGroup)
  1049.         {
  1050.             var s1 = null;
  1051.             var s2 = null;
  1052.             if (jsAppsID[i] != "")
  1053.             {
  1054.                 s1 = jsAppsID[i].split(";");
  1055.                 s2 = jsAppsName[i].split(";");
  1056.             }
  1057.             
  1058.             if (s1 != null)
  1059.                 for (j = 0; j < s1.length; j++)
  1060.                 {
  1061.                     var oOption = document.createElement("OPTION");
  1062.                     lbApps.options.add(oOption);
  1063.                     oOption.value = s1[j];
  1064.                     oOption.innerText = s2[j];
  1065.                 }
  1066.             ddl_SelectValue(lbApps, strApp);
  1067.             
  1068.             break;
  1069.         }
  1070.     
  1071.     jsFilterViewPages_ViewPagePicker(lbApps, lbViewPages, lbViewFields, lbListBox2);
  1072. }
  1073.  
  1074. function jsFilterViewPages_ViewPagePicker(lbApps, lbViewPages, lbViewFields, lbListBox2)
  1075. {
  1076.     if (lbApps.selectedIndex == -1 && lbApps.options.length != 0) strApp = lbApps.options(0).selected = true;
  1077.     var strApp = ddl_SelectedItem_Value(lbApps);
  1078.     
  1079.     var strViewPage = ddl_SelectedItem_Value(lbViewPages);
  1080.     while (lbViewPages.options.length != 0) lbViewPages.options.remove(0);
  1081.     
  1082.     for (i = 0; i < jsApp.length; i++)
  1083.         if (jsApp[i] == strApp)
  1084.         {
  1085.             var s1 = null;
  1086.             var s2 = null;
  1087.             if (jsViewPagesID[i] != "")
  1088.             {
  1089.                 s1 = jsViewPagesID[i].split(";");
  1090.                 s2 = jsViewPagesName[i].split(";");
  1091.             }
  1092.             
  1093.             if (s1 != null)
  1094.                 for (j = 0; j < s1.length; j++)
  1095.                 {
  1096.                     // Check if this item is already selected
  1097.                     var insert = true;
  1098.                     if (lbViewFields == null && lbListBox2 != null)
  1099.                         for (var l = 0; l < lbListBox2.options.length; l++)
  1100.                             if (s1[j] == lbListBox2.options(l).value)
  1101.                             {
  1102.                                 insert = false;
  1103.                                 break;
  1104.                             }
  1105.                     
  1106.                     if (insert)
  1107.                     {
  1108.                         var oOption = document.createElement("OPTION");
  1109.                         lbViewPages.options.add(oOption);
  1110.                         oOption.value = s1[j];
  1111.                         oOption.innerText = s2[j];
  1112.                     }
  1113.                 }
  1114.             ddl_SelectValue(lbViewPages, strViewPage);
  1115.  
  1116.             break;
  1117.         }
  1118.         
  1119.     if (lbViewFields != null) jsFilterViewFields_ViewFieldPicker(lbViewPages, lbViewFields, lbListBox2);
  1120. }
  1121.  
  1122. function jsFilterViewFields_ViewFieldPicker(lbViewPages, lbViewFields, lbListBox2)
  1123. {
  1124.     if (lbViewPages.selectedIndex == -1 && lbViewPages.options.length != 0) strViewPage = lbViewPages.options(0).selected = true;
  1125.     var strViewPage = ddl_SelectedItem_Value(lbViewPages);
  1126.     
  1127.     var strViewField = ddl_SelectedItem_Value(lbViewFields);
  1128.     while (lbViewFields.options.length != 0) lbViewFields.options.remove(0);
  1129.     
  1130.     for (i = 0; i < jsViewPage.length; i++)
  1131.         if (jsViewPage[i] == strViewPage)
  1132.         {
  1133.             var s1 = null;
  1134.             var s2 = null;
  1135.             if (jsViewFieldsID[i] != "")
  1136.             {
  1137.                 s1 = jsViewFieldsID[i].split(";");
  1138.                 s2 = jsViewFieldsName[i].split(";");
  1139.             }
  1140.             
  1141.             if (s1 != null)
  1142.                 for (j = 0; j < s1.length; j++)
  1143.                 {
  1144.                     // Check if this item is already selected
  1145.                     var insert = true;
  1146.                     for (var l = 0; l < lbListBox2.options.length; l++)
  1147.                         if (s1[j] == lbListBox2.options(l).value)
  1148.                         {
  1149.                             insert = false;
  1150.                             break;
  1151.                         }
  1152.                     
  1153.                     if (insert)
  1154.                     {
  1155.                         var oOption = document.createElement("OPTION");
  1156.                         lbViewFields.options.add(oOption);
  1157.                         oOption.value = s1[j];
  1158.                         oOption.innerText = s2[j];
  1159.                     }
  1160.                 }
  1161.             ddl_SelectValue(lbViewFields, strViewField);
  1162.  
  1163.             break;
  1164.         }
  1165. }
  1166.  
  1167.  
  1168. // ----------------------------------------------------------------------------------------
  1169. // --- DatePicker
  1170. // ----------------------------------------------------------------------------------------
  1171. function dp_SelectDate(ddlDay, ddlMonth, tbYear, date)
  1172. {
  1173.     var month = date.getMonth() + 1;
  1174.     var year = date.getFullYear();
  1175.     
  1176.     ddl_SelectValue_NoChange(ddlMonth, month);
  1177.     
  1178.     dp_FillDays(ddlDay, month, year);
  1179.     ddl_SelectValue_NoChange(ddlDay, date.getDate());
  1180.     
  1181.     tbYear.value = year;
  1182. }
  1183.  
  1184. function dp_FillDays(ddl, month, year)
  1185. {
  1186.     var days = 30;
  1187.     if (month == 2 && year % 4 != 0) days = 28; else
  1188.     if (month == 2 && year % 4 == 0) days = 29; else
  1189.     if (month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) days = 31;
  1190.     
  1191.     var strDay = ddl_SelectedItem_Value(ddl);
  1192.     while (ddl.options.length != 28) ddl.options.remove(ddl.options.length - 1);
  1193.     
  1194.     for (i = 29; i <= days; i++)
  1195.     {
  1196.         var oOption = document.createElement("OPTION");
  1197.         ddl.options.add(oOption);
  1198.         oOption.value = i;
  1199.         oOption.innerText = i;
  1200.     }
  1201.     
  1202.     ddl_SelectValue_NoChange(ddl, strDay);
  1203. }
  1204.  
  1205.  
  1206.  
  1207. // ----------------------------------------------------------------------------------------
  1208. // --- DataGrid
  1209. // ----------------------------------------------------------------------------------------
  1210. function dg_ShowGrid(obj, color)
  1211. {
  1212.     for (var i = 0; i < obj.rows.length; i++)
  1213.         for (var l = 1; l < obj.rows(i).cells.length; l++)
  1214.         {
  1215.             if (l != obj.rows(i).cells.length - 1) obj.rows(i).cells(l).style.borderRight = color + " 1px solid";
  1216.         }
  1217. }
  1218.  
  1219.  
  1220.  
  1221. // ----------------------------------------------------------------------------------------
  1222. // --- Comments
  1223. // ----------------------------------------------------------------------------------------
  1224. function jsInsertComment(tb, comment, user)
  1225. {
  1226.     if (comment != "")
  1227.     {
  1228.         var s = tb.value;
  1229.         if (s != "") s += "\r\n\r\n";
  1230.         s += user + ", " + Now() + "\r\n" + comment;
  1231.         tb.value = s;
  1232.         tb.fireEvent("onchange");
  1233.         tb.focus();
  1234.     }
  1235. }
  1236.  
  1237. function jsInsertRichComment(tb, comment, user)
  1238. {
  1239.     if (comment != "")
  1240.     {
  1241.         var s = tb.value;
  1242.         if (s != "") s += "<P> </P>";
  1243.         s += "<P><B>" + user + ", " + Now() + "</B></P>" + comment;
  1244.         tb.value = s;
  1245.         tb.fireEvent("onchange");
  1246.     }
  1247. }
  1248.  
  1249.  
  1250.  
  1251. // ----------------------------------------------------------------------------------------
  1252. // --- RichTextBox
  1253. // ----------------------------------------------------------------------------------------
  1254. function rtb_InsertTable(rtb, rows, columns)
  1255. {
  1256.     rtb.focus();
  1257.     var newTable = rtb.document.createElement('TABLE');
  1258.     for (y = 0; y < rows; y++)
  1259.     {
  1260.         var newRow = newTable.insertRow();
  1261.         for (x = 0; x < columns; x++)
  1262.         {
  1263.             var newCell = newRow.insertCell();
  1264.             if (y == 0 && x == 0) newCell.id = 'corner';
  1265.         }
  1266.     }
  1267.     newTable.border = 1;
  1268.     newTable.width = 25 * columns;
  1269.     rtb.document.selection.createRange().pasteHTML(newTable.outerHTML);
  1270.  
  1271.     var range = rtb.document.body.createTextRange();
  1272.     var item = rtb.document.getElementById('corner');
  1273.     item.id = '';
  1274.     range.moveToElementText(item);
  1275.     range.moveStart('character', range.text.length);
  1276.     range.select();
  1277. }
  1278.  
  1279. function rtb_GetRange(rtb)
  1280. {
  1281.     rtb.focus();
  1282.  
  1283.     var ref = null;
  1284.     var type = rtb.document.selection.type;
  1285.     var range = rtb.document.selection.createRange();
  1286.  
  1287.     switch(type)
  1288.     {
  1289.         case 'Control':
  1290.             if (range.length > 0 ) ref = range.item(0);
  1291.             break;
  1292.         case 'None':
  1293.             ref = range.parentElement();
  1294.             break;
  1295.         case 'Text':
  1296.             ref = range.parentElement();
  1297.             break;
  1298.     }
  1299.     return ref;
  1300. }
  1301.  
  1302. function rtb_CheckTag(rtb, item, tagName)
  1303. {
  1304.     if (item.tagName.search(tagName) != -1) return item;
  1305.     if (item.ID == rtb.ID) return false;
  1306.     item = item.parentElement;
  1307.     return rtb_CheckTag(rtb, item, tagName);
  1308. }
  1309.  
  1310. function rtb_InsertRow(rtb)
  1311. {
  1312.     var ref = rtb_GetRange(rtb);
  1313.     ref = rtb_CheckTag(rtb, ref, '/^(TABLE)|^(TR)|^(TD)|^(TBODY)/');
  1314.     switch (ref.tagName)
  1315.     {
  1316.         case 'TABLE':
  1317.             var newTable = ref.cloneNode(true);
  1318.             var newRow = newTable.insertRow();
  1319.             for (x = 0; x < newTable.rows[0].cells.length; x++)
  1320.             {
  1321.                 var newCell = newRow.insertCell();
  1322.             }
  1323.             ref.outerHTML = newTable.outerHTML;
  1324.             break;
  1325.         case 'TBODY':
  1326.             var newTable = ref.cloneNode(true);
  1327.             var newRow = newTable.insertRow();
  1328.             for (x = 0; x < newTable.rows[0].cells.length; x++)
  1329.             {
  1330.                 var newCell = newRow.insertCell();
  1331.             }
  1332.             ref.outerHTML = newTable.outerHTML;
  1333.             break;
  1334.         case 'TR':
  1335.             var rowIndex = ref.rowIndex;
  1336.             var parentTable = ref.parentElement.parentElement;
  1337.             var newTable = parentTable.cloneNode(true);
  1338.             var newRow = newTable.insertRow(rowIndex + 1);
  1339.             for (x = 0; x < newTable.rows[0].cells.length; x++)
  1340.             {
  1341.                 var newCell = newRow.insertCell();
  1342.             }
  1343.             parentTable.outerHTML = newTable.outerHTML;
  1344.             break;
  1345.         case 'TD':
  1346.             var parentRow = ref.parentElement;
  1347.             var rowIndex = parentRow.rowIndex;
  1348.             var cellIndex = ref.cellIndex;
  1349.             var parentTable = ref.parentElement.parentElement.parentElement;
  1350.             var newTable = parentTable.cloneNode(true);
  1351.             var newRow = newTable.insertRow(rowIndex + 1);
  1352.             for (x = 0; x < newTable.rows[0].cells.length; x++)
  1353.             {
  1354.                 var newCell = newRow.insertCell();
  1355.                 if (x == cellIndex) newCell.id = 'corner';
  1356.             }
  1357.             parentTable.outerHTML = newTable.outerHTML;
  1358.             
  1359.             var range = rtb.document.body.createTextRange();
  1360.             var item = rtb.document.getElementById('corner');
  1361.             item.id = '';
  1362.             range.moveToElementText(item);
  1363.             range.moveStart('character', range.text.length);
  1364.             range.select();
  1365.             break;
  1366.         default :
  1367.             rtb_InsertTable(rtb, 1, 3);
  1368.         return;
  1369.     }
  1370. }
  1371.  
  1372. function rtb_InsertColumn(rtb)
  1373. {
  1374.     var ref = rtb_GetRange(rtb);
  1375.     ref = rtb_CheckTag(rtb, ref, '/^(TABLE)|^(TR)|^(TD)|^(TBODY)/');
  1376.     switch (ref.tagName)
  1377.     {
  1378.         case 'TABLE':
  1379.             var newTable = ref.cloneNode(true);
  1380.             for (x = 0; x < newTable.rows.length; x++)
  1381.             {
  1382.                 var newCell = newTable.rows[x].insertCell();
  1383.             }
  1384.             newCell.focus();
  1385.             ref.outerHTML = newTable.outerHTML;
  1386.             break;
  1387.         case 'TBODY':
  1388.             var newTable = ref.cloneNode(true);
  1389.             for (x = 0; x < newTable.rows.length; x++)
  1390.             {
  1391.                 var newCell = newTable.rows[x].insertCell();
  1392.             }
  1393.             ref.outerHTML = newTable.outerHTML;
  1394.             break;
  1395.         case 'TR':
  1396.             ref = ref.parentElement.parentElement;
  1397.             var newTable = ref.cloneNode(true);
  1398.             for (x = 0; x < newTable.rows.length; x++)
  1399.             {
  1400.                 var newCell = newTable.rows[x].insertCell();
  1401.             }
  1402.             ref.outerHTML = newTable.outerHTML;
  1403.             break;
  1404.         case 'TD':
  1405.             var cellIndex = ref.cellIndex;
  1406.             var rowIndex = ref.parentElement.rowIndex;
  1407.             var parentTable = ref.parentElement.parentElement.parentElement;
  1408.             var newTable = parentTable.cloneNode(true);
  1409.             for (x = 0; x < newTable.rows.length; x++)
  1410.             {
  1411.                 var newCell = newTable.rows[x].insertCell(cellIndex + 1);
  1412.                 if (x == rowIndex) newCell.id = 'corner';
  1413.             }
  1414.             parentTable.outerHTML = newTable.outerHTML;
  1415.             var range = rtb.document.body.createTextRange();
  1416.             var item = rtb.document.getElementById('corner');
  1417.             item.id = '';
  1418.             range.moveToElementText(item);
  1419.             range.moveStart('character', range.text.length);
  1420.             range.select();
  1421.             break;
  1422.         default :
  1423.             rtb_InsertTable(rtb, 3, 1);
  1424.             break;
  1425.     }
  1426. }
  1427.  
  1428. function rtb_DeleteRow(rtb)
  1429. {
  1430.     var ref = rtb_GetRange(rtb);
  1431.     ref = rtb_CheckTag(rtb, ref, '/^(TABLE)|^(TR)|^(TD)|^(TBODY)/');
  1432.     switch (ref.tagName)
  1433.     {
  1434.         case 'TR':
  1435.             ref.parentElement.parentElement.deleteRow(ref.rowIndex);
  1436.             break;
  1437.         case 'TD':
  1438.             var cellIndex = ref.cellIndex;
  1439.             var parentRow = ref.parentElement;
  1440.             var rowIndex = parentRow.rowIndex;
  1441.             var parentTable = ref.parentElement.parentElement.parentElement;
  1442.             parentTable.deleteRow(rowIndex);
  1443.             if (rowIndex >= parentTable.rows.length)
  1444.             {
  1445.                 rowIndex = parentTable.rows.length - 1;
  1446.             }
  1447.             if (rowIndex >= 0)
  1448.             {
  1449.                 var range = rtb.document.body.createTextRange();
  1450.                 range.moveToElementText(parentTable.rows[rowIndex].cells[cellIndex]);
  1451.                 range.moveStart('character', range.text.length);
  1452.                 range.select();
  1453.             }
  1454.             else parentTable.removeNode(true);
  1455.             break;
  1456.         default: return;
  1457.     }
  1458. }
  1459.  
  1460. function rtb_DeleteColumn(rtb)
  1461. {
  1462.     var ref = rtb_GetRange(rtb);
  1463.     ref = rtb_CheckTag(rtb, ref, '/^(TABLE)|^(TR)|^(TD)|^(TBODY)/');
  1464.     switch(ref.tagName)
  1465.     {
  1466.         case 'TD':
  1467.             var rowIndex = ref.parentElement.rowIndex;
  1468.             var cellIndex = ref.cellIndex;
  1469.             var parentTable = ref.parentElement.parentElement.parentElement;
  1470.             var newTable = parentTable.cloneNode(true);
  1471.             if (newTable.rows[0].cells.length == 1)
  1472.             {
  1473.                 parentTable.removeNode(true);
  1474.                 return;
  1475.             }
  1476.             for (x = 0; x < newTable.rows.length; x++)
  1477.             {
  1478.                 if (newTable.rows[x].cells[cellIndex] == '[object]')
  1479.                 {
  1480.                     newTable.rows[x].deleteCell(cellIndex);
  1481.                 }
  1482.             }
  1483.             if (cellIndex >= newTable.rows[0].cells.length)
  1484.             {
  1485.                 cellIndex = newTable.rows[0].cells.length - 1;
  1486.             }
  1487.             if (cellIndex >= 0) newTable.rows[rowIndex].cells[cellIndex].id = 'corner';
  1488.             parentTable.outerHTML = newTable.outerHTML;
  1489.             if (cellIndex >= 0)
  1490.             {
  1491.                 var range = rtb.document.body.createTextRange();
  1492.                 var item = rtb.document.getElementById('corner');
  1493.                 item.id = '';
  1494.                 range.moveToElementText(item);
  1495.                 range.moveStart('character', range.text.length);
  1496.                 range.select();
  1497.             }
  1498.             break;
  1499.         default: return;
  1500.     }
  1501. }
  1502.  
  1503.  
  1504.  
  1505. // ----------------------------------------------------------------------------------------
  1506. // --- Tree
  1507. // ----------------------------------------------------------------------------------------
  1508. var tr_span = null;
  1509.  
  1510. function tr_Down(obj)
  1511. {
  1512.     tr_span = obj;
  1513.     while (tr_span.tagName != "SPAN") tr_span = tr_span.parentElement;
  1514.     
  1515.     var s = obj.id.split("_");
  1516.     
  1517.     // Get ItemID
  1518.     jsDD_MovingItem = jsDD_ActiveItem = s[s.length - 1];
  1519.     
  1520.     // Create window
  1521.     if (document.trWindow == null)
  1522.     {
  1523.         document.trWindow = document.createElement("SPAN");
  1524.         document.trWindow.className = "DragWindow";
  1525.         document.body.insertAdjacentElement("afterBegin", document.trWindow);
  1526.     }
  1527.     document.trWindow.style.height = 22;
  1528.     document.trWindow.style.width = obj.offsetWidth + 20;
  1529.     document.trWindow.move = false;
  1530.     obj.cY = event.clientY;
  1531.     obj.cX = event.clientX;
  1532.     obj.oY = event.offsetY + 4;
  1533.     obj.oX = event.offsetX + 18;
  1534.     
  1535.     // Attach events
  1536.     document.attachEvent("onmousemove", tr_Move);
  1537.     document.attachEvent("onscroll", tr_Move);
  1538.     document.attachEvent("onmouseup", tr_Up);
  1539.     document.attachEvent("onselectstart", tr_Cancel);
  1540. }
  1541.  
  1542. function tr_Cancel()
  1543. {
  1544.     return false;
  1545. }
  1546.  
  1547. function tr_Move()
  1548. {
  1549.     var element = document.all[tr_span.id + "_" + jsDD_MovingItem];
  1550.     
  1551.     if (!document.trWindow.move && Math.abs(element.cY - event.clientY) < 10 && Math.abs(element.cX - event.clientX) < 10) return;
  1552.     document.trWindow.move = true;
  1553.     
  1554.     // Move window
  1555.     document.trWindow.style.top = event.clientY - element.oY + document.body.scrollTop;
  1556.     document.trWindow.style.left = event.clientX - element.oX + document.body.scrollLeft;
  1557.     
  1558.     // Scroll page if needed
  1559.     if (event.clientY > document.body.clientHeight - 40 && document.body.scrollTop + event.clientY < document.body.scrollHeight - 60)
  1560.     {
  1561.         window.scrollBy(0, 20);
  1562.     }
  1563.     else if (event.clientY < 40)
  1564.     {
  1565.         window.scrollBy(0, -20);
  1566.     }
  1567.     
  1568.     // Get cell
  1569.     document.trWindow.style.display = "none";
  1570.     var o = document.elementFromPoint(event.clientX, event.clientY);
  1571.     document.trWindow.style.display = "block";
  1572.     
  1573.     try
  1574.     {
  1575.         if (o.tagName != "TD") throw "";
  1576.         
  1577.         var span = o;
  1578.         while (span.tagName != "SPAN") span = span.parentElement;
  1579.         if (span != tr_span) throw "";
  1580.         
  1581.         var s = o.id.split("_");
  1582.         jsDD_ActiveItem = s[s.length - 1];
  1583.     }
  1584.     catch (e)
  1585.     {
  1586.         jsDD_ActiveItem = 0; // Unknown element...
  1587.     }
  1588. }
  1589.  
  1590. function tr_Up()
  1591. {
  1592.     // Hide window
  1593.     document.trWindow.style.display = "none";
  1594.     
  1595.     // Detach events
  1596.     document.detachEvent("onmousemove" , tr_Move);
  1597.     document.detachEvent("onscroll" , tr_Move);
  1598.     document.detachEvent("onmouseup" , tr_Up);
  1599.     document.detachEvent("onselectstart", tr_Cancel);
  1600.     
  1601.     // Execute
  1602.     if (jsDD_MovingItem != jsDD_ActiveItem && jsDD_ActiveItem != 0)
  1603.     {
  1604.         var mi = document.all[tr_span.id + "_" + jsDD_MovingItem];
  1605.         var ai = document.all[tr_span.id + "_" + jsDD_ActiveItem];
  1606.         
  1607.         var table = mi;
  1608.         while (table.tagName != "TABLE") table = table.parentElement;
  1609.         table = table.nextSibling;
  1610.         
  1611.         try
  1612.         {
  1613.             if (table != null && table.tagName == "TABLE" && table.style.marginLeft == "13px")
  1614.             {
  1615.                 tr_Search(table, "contains", jsDD_ActiveItem);
  1616.             }
  1617.             
  1618.             if (confirm(tr_span.mq.replace("o1", mi.innerHTML).replace("o2", ai.innerHTML)))
  1619.             {
  1620.                 tr_span.mi.value = jsDD_MovingItem;
  1621.                 tr_span.ai.value = jsDD_ActiveItem;
  1622.                 tr_span.lbt2.click();
  1623.             }
  1624.         }
  1625.         catch (e)
  1626.         {
  1627.         }
  1628.     }
  1629. }
  1630.  
  1631. function tr_Search(obj, action, findID)
  1632. {
  1633.     for (var i = 0; i < obj.children.length; i++)
  1634.     {
  1635.         tr_Search(obj.children(i), action, findID);
  1636.         
  1637.         if (obj.children(i).tagName == "TABLE" && obj.children(i).rows(0).cells(0).className == "Tree1")
  1638.         {
  1639.             // contains
  1640.             if (action == "contains")
  1641.             {
  1642.                 var s = obj.children(i).rows(0).cells(1).id.split("_");
  1643.                 if (findID.toString() == s[s.length - 1]) throw "";
  1644.             }
  1645.             
  1646.             var table = obj.children(i).nextSibling;
  1647.             if (table == null || table.tagName != "TABLE" || table.style.marginLeft != "13px") continue;
  1648.             
  1649.             // roll
  1650.             if (table.style.display == "" && action == "roll")
  1651.             {
  1652.                 table.style.display = "none";
  1653.                 obj.children(i).rows(0).cells(0).firstChild.src = imPlus.src;
  1654.             }
  1655.         }
  1656.     }
  1657. }
  1658.  
  1659. function tr_Click(obj)
  1660. {
  1661.     var span = obj;
  1662.     while (span.tagName != "SPAN") span = span.parentElement;
  1663.     if (jsNumber(span.hf.value) != 0) document.all[span.id + "_" + span.hf.value].className = "Tree2";
  1664.     obj.rows(0).cells(1).className = "Tree3";
  1665.     
  1666.     var s = obj.rows(0).cells(1).id.split("_");
  1667.     span.hf.value = s[s.length - 1];
  1668.     span.bt.disabled = false;
  1669.     
  1670.     var table = obj.nextSibling;
  1671.     if (table == null || table.tagName != "TABLE" || table.style.marginLeft != "13px")
  1672.     {
  1673.         span.lbt.click();
  1674.         return;
  1675.     }
  1676.     
  1677.     if (table.style.display == "")
  1678.     {
  1679.         table.style.display = "none";
  1680.         obj.rows(0).cells(0).firstChild.src = imPlus.src;
  1681.     }
  1682.     else
  1683.     {
  1684.         table.style.display = "";
  1685.         obj.rows(0).cells(0).firstChild.src = imMinus.src;
  1686.     }
  1687.     
  1688.     try { span.details.style.visibility = jsVisibility(false); }
  1689.     catch (e) {}
  1690. }
  1691.  
  1692. function tr_Roll(span)
  1693. {
  1694.     if (jsNumber(span.hf.value) != 0)
  1695.     {
  1696.         document.all[span.id + "_" + span.hf.value].className = "Tree2";
  1697.         span.hf.value = "0";
  1698.         span.bt.disabled = true;
  1699.     }
  1700.     
  1701.     tr_Search(span, "roll");
  1702. }
  1703.  
  1704. function tr_Back(span)
  1705. {
  1706.     if (jsNumber(span.hf.value) != 0)
  1707.     {
  1708.         var obj = document.all[span.id + "_" + span.hf.value];
  1709.         obj.className = "Tree2";
  1710.         
  1711.         while (obj.tagName != "TABLE") obj = obj.parentElement;
  1712.         obj = obj.parentElement;
  1713.         
  1714.         if (obj == span)
  1715.         {
  1716.             span.hf.value = "0";
  1717.             span.bt.disabled = true;
  1718.         }
  1719.         else
  1720.         {
  1721.             while (obj.tagName != "TABLE") obj = obj.parentElement;
  1722.             obj = obj.previousSibling.rows(0).cells(1);
  1723.             obj.className = "Tree3";
  1724.             var s = obj.id.split("_");
  1725.             span.hf.value = s[s.length - 1];
  1726.         }
  1727.     }
  1728.     
  1729.     try { span.details.style.visibility = jsVisibility(false); }
  1730.     catch (e) {}
  1731. }
  1732.  
  1733.  
  1734.  
  1735. // ----------------------------------------------------------------------------------------
  1736. // --- Offset
  1737. // ----------------------------------------------------------------------------------------
  1738. function jsMarginLeft()
  1739. {
  1740.     return jsNumber(document.body.leftMargin);
  1741. }
  1742.  
  1743. function jsMarginTop()
  1744. {
  1745.     return jsNumber(document.body.topMargin);
  1746. }
  1747.  
  1748. function jsOffsetLeft(obj, width)
  1749. {
  1750.     var n = width ? obj.offsetWidth : 0;
  1751.     while (obj.tagName != "BODY")
  1752.     {
  1753.         if (obj.tagName != "FORM" && obj.tagName != "TBODY" && obj.tagName != "TR") n += obj.offsetLeft;
  1754.         obj = obj.parentElement;
  1755.     }
  1756.     return n - jsMarginLeft();
  1757. }
  1758.  
  1759. function jsOffsetTop(obj, height)
  1760. {
  1761.     var n = height ? obj.offsetHeight : 0;
  1762.     while (obj.tagName != "BODY")
  1763.     {
  1764.         if (obj.tagName != "FORM" && obj.tagName != "TBODY" && obj.tagName != "TR") n += obj.offsetTop;
  1765.         obj = obj.parentElement;
  1766.     }
  1767.     return n - jsMarginTop();
  1768. }
  1769.  
  1770.  
  1771.  
  1772. // ----------------------------------------------------------------------------------------
  1773. // --- Drag&Drop
  1774. // ----------------------------------------------------------------------------------------
  1775. function jsDD_Clear()
  1776. {
  1777.     document.ddmi = -1; // LastID
  1778.     if (document.dragLine1 != null)
  1779.     {
  1780.         document.dragLine1.obj = null;
  1781.         document.dragLine1.style.display = jsDisplay(false);
  1782.     }
  1783. }
  1784.  
  1785. function jsDD_Click(obj)
  1786. {
  1787.     if (document.dragLine1 == null)
  1788.     {
  1789.         document.dragLine1 = document.createElement("HR");
  1790.         document.dragLine1.style.position = "absolute";
  1791.         document.dragLine1.style.color = "#e7e7e7";
  1792.         document.dragLine1.style.height = 1;
  1793.         document.body.insertAdjacentElement("afterBegin", document.dragLine1);
  1794.     }
  1795.     
  1796.     document.dragLine1.style.display = jsDisplay(false);
  1797.     
  1798.     if (document.dragLine1.obj == obj)
  1799.     {
  1800.         document.ddmi = -1; // LastID
  1801.         document.dragLine1.obj = null;
  1802.     }
  1803.     else
  1804.     {
  1805.         document.ddmi = obj.ItemID;
  1806.         document.dragLine1.obj = obj;
  1807.         
  1808.         var margin = 0;
  1809.         document.dragLine1.style.width = obj.offsetWidth;
  1810.         if (obj.tagName == "TR")
  1811.         {
  1812.             margin = -1;
  1813.             obj = obj.cells(0);
  1814.         }
  1815.         document.dragLine1.style.top = jsMarginTop() + jsOffsetTop(obj) + margin;
  1816.         document.dragLine1.style.left = jsMarginLeft() + jsOffsetLeft(obj);
  1817.         document.dragLine1.style.display = jsDisplay(true);
  1818.     }
  1819. }
  1820.  
  1821.  
  1822.  
  1823. // ----------------------------------------------------------------------------------------
  1824. // --- Holidays
  1825. // ----------------------------------------------------------------------------------------
  1826. function jsMeasureWorkDays(h1, h2, startdate, enddate)
  1827. {
  1828.     var date1 = new Date(startdate.getFullYear(), startdate.getMonth(), startdate.getDate());
  1829.     var date2 = new Date(enddate.getFullYear(), enddate.getMonth(), enddate.getDate());
  1830.     var days = 0;
  1831.     
  1832.     if (date1 > date2) return 0;
  1833.     
  1834.     while (date1 <= date2)
  1835.     {
  1836.         if (!(date1.getDay() == 0 || date1.getDay() == 6))
  1837.         {
  1838.             var inc = 1;
  1839.             for (var i = 0; i < h1.length; i++)
  1840.             {
  1841.                 var s = h1[i].split(".");
  1842.                 if (date1.getDate() == s[0] && date1.getMonth() + 1 == s[1] && date1.getFullYear() == s[2])
  1843.                 {
  1844.                     inc = 0;
  1845.                     break;
  1846.                 }
  1847.             }
  1848.             if (inc == 1)
  1849.                 for (var i = 0; i < h2.length; i++)
  1850.                 {
  1851.                     var s = h2[i].split(".");
  1852.                     if (date1.getDate() == s[0] && date1.getMonth() + 1 == s[1] && date1.getFullYear() == s[2])
  1853.                     {
  1854.                         inc = 0.5;
  1855.                         break;
  1856.                     }
  1857.             }
  1858.             days += inc;
  1859.         }
  1860.         date1.setDate(date1.getDate() + 1);
  1861.     }
  1862.     
  1863.     // Minutes
  1864.     var startdate_min = startdate.getHours() * 60 + startdate.getMinutes();
  1865.     var enddate_min = enddate.getHours() * 60 + enddate.getMinutes();
  1866.     
  1867.     if (startdate_min != 0 && enddate_min == 0) days -= startdate_min / 1440;
  1868.     if (startdate_min != 0 && enddate_min != 0) days -= (startdate_min + 1440 - enddate_min) / 1440;
  1869.     if (startdate_min == 0 && enddate_min != 0) days -= (1440 - enddate_min) / 1440;
  1870.     
  1871.     if (days < 0) days = 0;
  1872.     return days;
  1873. }
  1874.  
  1875.  
  1876.  
  1877. // ----------------------------------------------------------------------------------------
  1878. // --- Calendar, DatePicker
  1879. // ----------------------------------------------------------------------------------------
  1880. function jsFormatCalendar(obj, month)
  1881. {
  1882.     var lastDay = 0;
  1883.     for (var i = 0; i < obj.rows.length; i++)
  1884.         for (var l = 0; l < obj.rows(i).cells.length; l++)
  1885.         {
  1886.             var o = obj.rows(i).cells(l).childNodes;
  1887.             for (var n = 0; n < o.length; n++)
  1888.             {
  1889.                 if (l == 0 && o.item(n).tagName == "A")
  1890.                 {
  1891.                     var day = o.item(n).innerText.length > 2 ? jsNumber(o.item(n).innerText.split(' ')[1]) : jsNumber(o.item(n).innerText);
  1892.                     if (!(i == 1 && day > 20) && day > lastDay) o.item(n).innerText = month + " " + (lastDay = day);
  1893.                 }
  1894.                 if (o.item(n).tagName == "TABLE")
  1895.                     for (var r = 0; r < o.item(n).rows.length; r++)
  1896.                         for (var c = 0; c < o.item(n).rows(r).cells.length; c++)
  1897.                             if (o.item(n).rows(r).cells(c).style.height == "18px")
  1898.                             {
  1899.                                 o.item(n).rows(r).cells(c).style.height = o.item(n).rows(r).cells(c).firstChild.style.height = "37px";
  1900.                                 o.item(n).rows(r).cells(c).style.paddingLeft = o.item(n).rows(r).cells(c).style.paddingRight = "2px";
  1901.                             }
  1902.             }
  1903.         }
  1904. }
  1905.  
  1906. function jsFormatDatePicker(obj)
  1907. {
  1908.     for (var i = 2; i < obj.rows.length; i++)
  1909.         for (var l = 0; l < obj.rows(i).cells.length; l++)
  1910.         {
  1911.             var o = obj.rows(i).cells(l).childNodes.item(0);
  1912.             if (o.style.color == "#ff8080")
  1913.                 for (var j = 0; j < s1.length; j++)
  1914.                     if (s1[j] == ZInt(o.innerText) + s)
  1915.                     {
  1916.                         o.title = s2[j];
  1917.                         break;
  1918.                     }
  1919.         }
  1920. }
  1921.  
  1922.  
  1923.  
  1924. // ----------------------------------------------------------------------------------------
  1925. // --- HeaderTable
  1926. // ----------------------------------------------------------------------------------------
  1927. function jsHeaderTable_Click(obj, cell, hf, tables, buttonTable, main)
  1928. {
  1929.     var activeCell = jsNumber(hf.value);
  1930.     if (activeCell != cell) jsDD_Clear();
  1931.     var im, im0, im1;
  1932.     
  1933.     // left
  1934.     if (activeCell == 0) im = imHeader_Left; else im = imHeader_Middle;
  1935.     obj.rows(0).cells(activeCell*2).firstChild.src = imHeader_1x1.src;
  1936.     obj.rows(1).cells(activeCell*2).firstChild.src = im.src;
  1937.     
  1938.     // middle
  1939.     obj.rows(0).cells(activeCell*2 + 1).firstChild.src = imHeader_1x1.src;
  1940.     obj.rows(1).cells(activeCell*2 + 1).className = "HeaderTableTD";
  1941.     
  1942.     // right
  1943.     if (activeCell == tables.length - 1) im = imHeader_Right; else im = imHeader_Middle;
  1944.     obj.rows(0).cells(activeCell*2 + 2).firstChild.src = imHeader_1x1.src;
  1945.     obj.rows(1).cells(activeCell*2 + 2).firstChild.src = im.src;
  1946.     
  1947.     // button table
  1948.     if (buttonTable != null)
  1949.     {
  1950.         buttonTable.rows(0).cells(activeCell).style.display = jsDisplay(false);
  1951.         buttonTable.rows(0).cells(cell).style.display = jsDisplay(true);
  1952.     }
  1953.     
  1954.     // header table
  1955.     tables[activeCell].style.display = jsDisplay(false);
  1956.     tables[cell].style.display = jsDisplay(true);
  1957.     obj.style.width = "100%";
  1958.     if (obj.offsetWidth < 592) obj.style.width = 592;
  1959.     
  1960.     // left
  1961.     if (cell == 0)
  1962.     {
  1963.         im0 = imHeader_Left_Selected_Bar;
  1964.         im1 = imHeader_Left_Selected;
  1965.     }
  1966.     else
  1967.     {
  1968.         im0 = imHeader_Middle_RightSelected_Bar;
  1969.         im1 = imHeader_Middle_RightSelected;
  1970.     }
  1971.     obj.rows(0).cells(cell*2).firstChild.src = im0.src;
  1972.     obj.rows(1).cells(cell*2).firstChild.src = im1.src;
  1973.     
  1974.     // middle
  1975.     obj.rows(0).cells(1 + cell*2).firstChild.src = imHeader_Bar.src;
  1976.     obj.rows(1).cells(1 + cell*2).className = "HeaderTableTD_Selected";
  1977.     
  1978.     // right
  1979.     if (cell == tables.length - 1)
  1980.     {
  1981.         im0 = imHeader_Right_Selected_Bar;
  1982.         im1 = imHeader_Right_Selected;
  1983.     }
  1984.     else
  1985.     {
  1986.         im0 = imHeader_Middle_LeftSelected_Bar;
  1987.         im1 = imHeader_Middle_LeftSelected;
  1988.     }
  1989.     obj.rows(0).cells(cell*2 + 2).firstChild.src = im0.src;
  1990.     obj.rows(1).cells(cell*2 + 2).firstChild.src = im1.src;
  1991.     
  1992.     hf.value = cell;
  1993.     
  1994.     if (main.rows(2).cells.length == 1)
  1995.     {
  1996.         var filter = "progid:DXImageTransform.Microsoft.Shadow(direction=135,color=#d0cebf,strength=2)";
  1997.         
  1998.         for (var i = 0; i < 3; i++)
  1999.         {
  2000.             if (i == 0) main.rows(i).cells(0).children(1).style.filter = filter;
  2001.             else if (i == 1) continue;
  2002.             else if (i == 2) main.rows(i).cells(0).style.filter = filter;
  2003.             
  2004.             var im = new Image();
  2005.             im.src = root + "Images/1x1.gif";
  2006.             im.width = 2;
  2007.             im.height = 1;
  2008.             
  2009.             var td = document.createElement("TD");
  2010.             main.rows(i).cells(0).insertAdjacentElement("afterEnd", td);
  2011.             td.insertAdjacentElement("afterBegin", im);
  2012.         }
  2013.         
  2014.         for (var i = 3; i < main.rows.length; i++)
  2015.             if (main.rows(i).cells.length == 1)
  2016.             {
  2017.                 main.rows(i).cells(0).colSpan = 2;
  2018.             }
  2019.     }
  2020.     
  2021.     jsResizeWindow(main.offsetWidth, main.offsetHeight, 8, 8, 8, 8, false, false);
  2022. }
  2023.  
  2024. function jsHeaderTable_Over(obj, cell, hf, len)
  2025. {
  2026.     var activeCell = jsNumber(hf.value);
  2027.     if (cell == activeCell) return;
  2028.     var im;
  2029.     
  2030.     // left
  2031.     if (cell == 0) im = imHeader_Left_Over;
  2032.     else
  2033.     {
  2034.         if (cell - 1 == activeCell) im = imHeader_Middle_LeftSelected_Over;
  2035.         else im = imHeader_Middle_RightOver;
  2036.     }
  2037.     obj.rows(1).cells(cell*2).firstChild.src = im.src;
  2038.  
  2039.     // middle
  2040.     obj.rows(1).cells(cell*2 + 1).className = "HeaderTableTD_Over";
  2041.     
  2042.     // right
  2043.     if (cell == len - 1) im = imHeader_Right_Over;
  2044.     else
  2045.     {
  2046.         if (cell + 1 == activeCell) im = imHeader_Middle_RightSelected_Over;
  2047.         else im = imHeader_Middle_LeftOver;
  2048.     }
  2049.     obj.rows(1).cells(cell*2 + 2).firstChild.src = im.src;
  2050. }
  2051.  
  2052. function jsHeaderTable_Out(obj, cell, hf, len)
  2053. {
  2054.     var activeCell = jsNumber(hf.value);
  2055.     if (cell == activeCell) return;
  2056.     var im;
  2057.     
  2058.     // left
  2059.     if (cell == 0) im = imHeader_Left;
  2060.     else
  2061.     {
  2062.         if (cell - 1 == activeCell) im = imHeader_Middle_LeftSelected;
  2063.         else im = imHeader_Middle;
  2064.     }
  2065.     obj.rows(1).cells(cell*2).firstChild.src = im.src;
  2066.     
  2067.     // middle
  2068.     obj.rows(1).cells(cell*2 + 1).className = "HeaderTableTD";
  2069.     
  2070.     // right
  2071.     if (cell == len - 1) im = imHeader_Right;
  2072.     else
  2073.     {
  2074.         if (cell + 1 == activeCell) im = imHeader_Middle_RightSelected;
  2075.         else im = imHeader_Middle;
  2076.     }
  2077.     obj.rows(1).cells(cell*2 + 2).firstChild.src = im.src;
  2078. }
  2079.  
  2080.  
  2081.  
  2082. // ----------------------------------------------------------------------------------------
  2083. // --- Numbers in words
  2084. // ----------------------------------------------------------------------------------------
  2085. var numerals0_cz = new Array("nula", "jedna", "dva", "t" + String.fromCharCode(345) + "i", String.fromCharCode(269) + "ty" + String.fromCharCode(345) + "i", "p" + String.fromCharCode(283) + "t", String.fromCharCode(353) + "est", "sedm", "osm", "dev" + String.fromCharCode(283) + "t", "deset", "jeden" + String.fromCharCode(225) + "ct", "dvan" + String.fromCharCode(225) + "ct", "t" + String.fromCharCode(345) + "in" + String.fromCharCode(225) + "ct", String.fromCharCode(269) + "trn" + String.fromCharCode(225) + "ct", "patn" + String.fromCharCode(225) + "ct", String.fromCharCode(353) + "estn" + String.fromCharCode(225) + "ct", "sedmn" + String.fromCharCode(225) + "ct", "osmn" + String.fromCharCode(225) + "ct", "devaten" + String.fromCharCode(225) + "ct");
  2086. var numerals1_cz = new Array("dvacet", "t" + String.fromCharCode(345) + "icet", String.fromCharCode(269) + "ty" + String.fromCharCode(345) + "icet", "pades" + String.fromCharCode(225) + "t", String.fromCharCode(353) + "edes" + String.fromCharCode(225) + "t", "sedmdes" + String.fromCharCode(225) + "t", "osmdes" + String.fromCharCode(225) + "t", "devades" + String.fromCharCode(225) + "t");
  2087.  
  2088. var numerals0_en = new Array("zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen");
  2089. var numerals1_en = new Array("twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninety");
  2090.  
  2091. var numerals0_de = new Array("null", "ein", "zwei", "drei", "vier", "f" + String.fromCharCode(252) + "nf", "sechs", "sieben", "acht", "neun", "zehn", "elf", "zw" + String.fromCharCode(246) + "lf", "dreizehn", "vierzehn", "f" + String.fromCharCode(252) + "nfzehn", "sechzehn", "siebzehn", "achtzehn", "neunzehn");
  2092. var numerals1_de = new Array("zwanzig", "drei" + String.fromCharCode(223) + "ig", "vierzig", "f" + String.fromCharCode(252) + "nfzig", "sechzig", "siebzig", "achtzig", "neunzig");
  2093.  
  2094. var numerals0_fr = new Array("z" + String.fromCharCode(233) + "ro", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf", "dix", "onze", "douze", "treize", "quatorze", "quinze", "seize", "dix-sept", "dix-huit", "dix-neuf");
  2095. var numerals1_fr = new Array("vingt", "trente", "quarante", "cinquante", "soixante", "soixante-dix", "quatre-vingts", "quatre-vingt-dix");
  2096.  
  2097. function jsNumberInWords(n, language)
  2098. {
  2099.     n = Math.round(Math.abs(jsNumber(n)));
  2100.     var s = n.toString();
  2101.     var r = ""; // result
  2102.     var ch = ""; // char
  2103.     
  2104.     switch (language)
  2105.     {
  2106.         case "cz":
  2107.             if (n < 20) return numerals0_cz[n];
  2108.             if (n < 100 && n % 10 == 0) return numerals1_cz[n / 10 - 2];
  2109.             if (n < 100 && n % 10 != 0) return numerals1_cz[s.substring(0, 1) - 2] + numerals0_cz[s.substring(1, 2)];
  2110.             
  2111.             n = 0;
  2112.             for (var i = s.length - 1; i >= 0; i--)
  2113.             {
  2114.                 n++;
  2115.                 if (n == 2) ch = s.substring(i, i + 2); else ch = s.substring(i, i + 1);
  2116.                 if (ch == 0) continue;
  2117.                 
  2118.                 switch (n)
  2119.                 {
  2120.                     case 1:        continue;
  2121.                     case 2:        r = jsNumberInWords(ch, language) + r; break;
  2122.                     case 3:        if (ch == 1) r = "sto" + r; else if (ch == 2) r = "dv" + String.fromCharCode(283) + "st" + String.fromCharCode(283) + r; else if (ch == 3 || ch == 4) r = numerals0_cz[ch] + "sta" + r; else r = numerals0_cz[ch] + "set" + r; break;
  2123.                     
  2124.                     case 4:        if (s.length > n) continue; else if (ch == 1) r = "jedentis" + String.fromCharCode(237) + "c" + r; else if (ch >= 2 && ch <= 4) r = numerals0_cz[ch] + "tis" + String.fromCharCode(237) + "ce " + r; else r = numerals0_cz[ch] + "tis" + String.fromCharCode(237) + "c" + r; break;
  2125.                     case 5:        if (s.length > n) continue; else r = jsNumberInWords(s.substring(i, i + 2), language) + "tis" + String.fromCharCode(237) + "c" + r; break;
  2126.                     case 6:        r = jsNumberInWords(s.substring(i, i + 3), language) + "tis" + String.fromCharCode(237) + "c" + r; break;
  2127.                     
  2128.                     case 7:        if (s.length > n) continue; else if (ch == 1) r = "jedenmili" + String.fromCharCode(243) + "n" + r; else if (ch >= 2 && ch <= 4) r = numerals0_cz[ch] + "mili" + String.fromCharCode(243) + "ny" + r; else r = numerals0_cz[ch] + "mili" + String.fromCharCode(243) + "n" + String.fromCharCode(367) + r; break;
  2129.                     case 8:        if (s.length > n) continue; else r = jsNumberInWords(s.substring(i, i + 2), language) + "mili" + String.fromCharCode(243) + "n" + String.fromCharCode(367) + r; break;
  2130.                     case 9:        r = jsNumberInWords(s.substring(i, i + 3), language) + "mili" + String.fromCharCode(243) + "n" + String.fromCharCode(367) + r; break;
  2131.                     
  2132.                     case 10:    if (s.length > n) continue; else if (ch == 1) r = "jednamiliarda" + r; else if (ch >= 2 && ch <= 4) r = numerals0_cz[ch] + "miliardy" + r; else r = numerals0_cz[ch] + "miliard" + r; break;
  2133.                     case 11:    if (s.length > n) continue; else r = jsNumberInWords(s.substring(i, i + 2), language) + "miliard" + r; break;
  2134.                     case 12:    r = jsNumberInWords(s.substring(i, i + 3), language) + "miliard" + r; break;
  2135.                 }
  2136.             }
  2137.             break;
  2138.             
  2139.         case "en":
  2140.             if (n < 20) return numerals0_en[n];
  2141.             if (n < 100 && n % 10 == 0) return numerals1_en[n / 10 - 2];
  2142.             if (n < 100 && n % 10 != 0) return numerals1_en[s.substring(0, 1) - 2] + " " + numerals0_en[s.substring(1, 2)];
  2143.             
  2144.             n = 0;
  2145.             for (var i = s.length - 1; i >= 0; i--)
  2146.             {
  2147.                 n++;
  2148.                 if (n == 2) ch = s.substring(i, i + 2); else ch = s.substring(i, i + 1);
  2149.                 if (ch == 0) continue;
  2150.                 
  2151.                 switch (n)
  2152.                 {
  2153.                     case 1:        continue;
  2154.                     case 2:        r = "and " + jsNumberInWords(ch, language) + r; break;
  2155.                     case 3:        r = numerals0_en[ch] + " hundred " + r; break;
  2156.                     
  2157.                     case 4:        if (s.length > n) continue; else r = numerals0_en[ch] + " thousand " + r; break;
  2158.                     case 5:        if (s.length > n) continue; else r = jsNumberInWords(s.substring(i, i + 2), language) + " thousand " + r; break;
  2159.                     case 6:        r = jsNumberInWords(s.substring(i, i + 3), language) + " thousand " + r; break;
  2160.                     
  2161.                     case 7:        if (s.length > n) continue; else r = numerals0_en[ch] + " million " + r; break;
  2162.                     case 8:        if (s.length > n) continue; else r = jsNumberInWords(s.substring(i, i + 2), language) + " million " + r; break;
  2163.                     case 9:        r = jsNumberInWords(s.substring(i, i + 3), language) + " million "; break;
  2164.                     
  2165.                     case 10:    if (s.length > n) continue; else r = numerals0_en[ch] + " miliard " + r; break;
  2166.                     case 11:    if (s.length > n) continue; else r = jsNumberInWords(s.substring(i, i + 2), language) + " miliard " + r; break;
  2167.                     case 12:    r = jsNumberInWords(s.substring(i, i + 3), language) + " miliard " + r; break;
  2168.                 }
  2169.             }
  2170.             if (r.lastIndexOf(" ") == r.length - 1) r = r.substring(0, r.length - 1);
  2171.             break;
  2172.             
  2173.         case "de":
  2174.             if (n < 20) return numerals0_de[n];
  2175.             if (n < 100 && n % 10 == 0) return numerals1_de[n / 10 - 2];
  2176.             if (n < 100 && n % 10 != 0) return numerals0_de[s.substring(1, 2)] + "und" + numerals1_de[s.substring(0, 1) - 2];
  2177.             
  2178.             n = 0;
  2179.             for (var i = s.length - 1; i >= 0; i--)
  2180.             {
  2181.                 n++;
  2182.                 if (n == 2) ch = s.substring(i, i + 2); else ch = s.substring(i, i + 1);
  2183.                 if (ch == 0) continue;
  2184.                 
  2185.                 switch (n)
  2186.                 {
  2187.                     case 1:        continue;
  2188.                     case 2:        r = jsNumberInWords(ch, language) + r; break;
  2189.                     case 3:        r = numerals0_de[ch] + "hundert" + r; break;
  2190.                     
  2191.                     case 4:        if (s.length > n) continue; else r = numerals0_de[ch] + "tausend" + r; break;
  2192.                     case 5:        if (s.length > n) continue; else r = jsNumberInWords(s.substring(i, i + 2), language) + "tausend" + r; break;
  2193.                     case 6:        r = jsNumberInWords(s.substring(i, i + 3), language) + "tausend" + r; break;
  2194.                     
  2195.                     case 7:        if (s.length > n) continue; else if (ch == 1) r = "einemillion" + r; else r = numerals0_de[ch] + "millionen" + r; break;
  2196.                     case 8:        if (s.length > n) continue; else r = jsNumberInWords(s.substring(i, i + 2), language) + "millionen" + r; break;
  2197.                     case 9:        r = jsNumberInWords(s.substring(i, i + 3), language) + "millionen" + r; break;
  2198.                     
  2199.                     case 10:    if (s.length > n) continue; else if (ch == 1) r = "einemilliarde" + r; else r = numerals0_de[ch] + "milliarden" + r; break;
  2200.                     case 11:    if (s.length > n) continue; else r = jsNumberInWords(s.substring(i, i + 2), language) + "milliarden" + r; break;
  2201.                     case 12:    r = jsNumberInWords(s.substring(i, i + 3), language) + "milliarden" + r; break;
  2202.                 }
  2203.             }
  2204.             break;
  2205.             
  2206.         case "fr":
  2207.             if (n < 20) return numerals0_fr[n];
  2208.             if (n < 100 && n % 10 == 0) return numerals1_fr[n / 10 - 2];
  2209.             if (n < 100 && n % 10 != 0)
  2210.             {
  2211.                 if (s.substring(1, 2) == 1) return numerals1_fr[s.substring(0, 1) - 2] + "-et-un";
  2212.                 else return numerals1_fr[s.substring(0, 1) - 2] + "-" + numerals0_fr[s.substring(1, 2)];
  2213.             }
  2214.             
  2215.             n = 0;
  2216.             for (var i = s.length - 1; i >= 0; i--)
  2217.             {
  2218.                 n++;
  2219.                 if (n == 2) ch = s.substring(i, i + 2); else ch = s.substring(i, i + 1);
  2220.                 if (ch == 0) continue;
  2221.                 
  2222.                 switch (n)
  2223.                 {
  2224.                     case 1:        continue;
  2225.                     case 2:        r = jsNumberInWords(ch, language) + r; break;
  2226.                     case 3:        if (ch == 1) r = "cent " + r; else r = numerals0_fr[ch] + " cents " + r; break;
  2227.                     
  2228.                     case 4:        if (s.length > n) continue; else if (ch == 1) r = "un mille " + r; else r = numerals0_fr[ch] + " milles " + r; break;
  2229.                     case 5:        if (s.length > n) continue; else r = jsNumberInWords(s.substring(i, i + 2), language) + " milles " + r; break;
  2230.                     case 6:        r = jsNumberInWords(s.substring(i, i + 3), language) + " milles " + r; break;
  2231.                     
  2232.                     case 7:        if (s.length > n) continue; else if (ch == 1) r = "un million " + r; else r = numerals0_fr[ch] + " millions " + r; break;
  2233.                     case 8:        if (s.length > n) continue; else r = jsNumberInWords(s.substring(i, i + 2), language) + " millions " + r; break;
  2234.                     case 9:        r = jsNumberInWords(s.substring(i, i + 3), language) + " millions " + r; break;
  2235.                     
  2236.                     case 10:    if (s.length > n) continue; else if (ch == 1) r = "un milliard " + r; else r = numerals0_fr[ch] + " milliards " + r; break;
  2237.                     case 11:    if (s.length > n) continue; else r = jsNumberInWords(s.substring(i, i + 2), language) + " milliards " + r; break;
  2238.                     case 12:    r = jsNumberInWords(s.substring(i, i + 3), language) + " milliards " + r; break;
  2239.                 }
  2240.             }
  2241.             if (r.lastIndexOf(" ") == r.length - 1) r = r.substring(0, r.length - 1);
  2242.             r = r.replace("milles ", "mille ");
  2243.             break;
  2244.     }
  2245.     
  2246.     return r;
  2247. }
  2248.  
  2249.  
  2250.  
  2251. // ----------------------------------------------------------------------------------------
  2252. // --- Filter
  2253. // ----------------------------------------------------------------------------------------
  2254. function jsInitFilter(ddl)
  2255. {
  2256.     for (var i = ddl.options.length - 2; i < ddl.options.length; i++)
  2257.         if (ddl.options(i).value == "-1" || ddl.options(i).value == "-2")
  2258.         {
  2259.             ddl.options(i).style.backgroundColor = "#f7f7f7";
  2260.         }
  2261. }
  2262.  
  2263. function jsFilter(ddl, query, cid, gcid)
  2264. {
  2265.     var sv = ddl_SelectedItem_Value(ddl);
  2266.     if (sv == "-1" || sv == "-2")
  2267.     {
  2268.         ddl.selectedIndex = ddl.selectedIndex_;
  2269.         ddl.blur();
  2270.         if (sv == "-1") jsOpen(root + "Multiselect.aspx?query=" + query + "&id=" + cid + "&gcid=" + gcid);
  2271.         else jsOpen(root + "Form2.aspx?id=" + cid + "&hfCCh_ID=" + ddl.hfCCh_ID + "&hfCCh_Value=" + ddl.hfCCh_Value + "&btCCh=" + ddl.btCCh);
  2272.         return true;
  2273.     }
  2274.     else if (ddl.selectedIndex_ == ddl.selectedIndex) return true; // Searching in ddl...
  2275.     else return false;
  2276. }
  2277.  
  2278.  
  2279.  
  2280. // ----------------------------------------------------------------------------------------
  2281. // --- Tables, Controls
  2282. // ----------------------------------------------------------------------------------------
  2283. function jsParentRow(obj, index)
  2284. {
  2285.     var n = 0;
  2286.     while (obj.tagName != "BODY")
  2287.     {
  2288.         obj = obj.parentElement;
  2289.         if (obj.tagName == "TR")
  2290.         {
  2291.             if (index != null && n != index) { n++; continue; }
  2292.             return obj;
  2293.         }
  2294.     }
  2295.     return null;
  2296. }
  2297.  
  2298. function jsExtendTables(tables)
  2299. {
  2300.     var max = 0;
  2301.     for (var i = 0; i < tables.length; i++) if (document.all.item(tables[i]).offsetWidth > max) max = document.all.item(tables[i]).offsetWidth;
  2302.     for (var i = 0; i < tables.length; i++) document.all.item(tables[i]).width = max;
  2303. }
  2304.  
  2305. function jsEnableControls(controls)
  2306. {
  2307.     for (var i = 0; i < controls.length; i++)
  2308.         try { document.forms[0].item(controls[i]).disabled = false; }
  2309.         catch (e) {}
  2310. }
  2311.  
  2312.  
  2313.  
  2314. // ----------------------------------------------------------------------------------------
  2315. // --- ActiveX
  2316. // ----------------------------------------------------------------------------------------
  2317. function jsReplace(s, s1, s2)
  2318. {
  2319.     var n = 0;
  2320.     while ((n = s.indexOf(s1, n)) != -1)
  2321.     {
  2322.         s = s.substring(0, n) + s2 + s.substring(n + s1.length, s.length);
  2323.         n += s2.length;
  2324.     }
  2325.     return s;
  2326. }
  2327.  
  2328. function jsEncodeUrl(url)
  2329. {
  2330.     return jsReplace(encodeURI(url), "+", "%2B");
  2331. }
  2332.  
  2333. function jsFullAppPath(shell, filename)
  2334. {
  2335.     var s = null;
  2336.     if (filename == "mspaint.exe" || filename == "notepad.exe") s = filename;
  2337.     else
  2338.     {
  2339.         try { s = shell.RegRead("HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\" + filename + "\\"); }
  2340.         catch (e)
  2341.         {
  2342.             try { s = shell.RegRead("HKCR\\Applications\\" + filename + "\\shell\\open\\command\\"); }
  2343.             catch (e)
  2344.             {
  2345.                 s = shell.RegRead("HKCR\\Applications\\" + filename + "\\shell\\edit\\command\\");
  2346.             }
  2347.         }
  2348.         
  2349.         if (s.substring(0, 1) == '"') s = s.substring(1, s.indexOf('"', 1));
  2350.         else s = s.split(" ")[0];
  2351.     }
  2352.     
  2353.     return s;
  2354. }
  2355.  
  2356. function jsOpenActiveX(url, size, link, error, error2)
  2357. {
  2358.     url = link.href.substring(0, link.href.indexOf("/Temp/") + 6) + url;
  2359.     var n = url.lastIndexOf(".");
  2360.     var extension = n == -1 ? "" : url.substring(n, url.length);
  2361.     
  2362.     // WScript.Shell
  2363.     try { var shell = new ActiveXObject("WScript.Shell"); }
  2364.     catch (e)
  2365.     {
  2366.         alert(error, "info");
  2367.         window.close();
  2368.         return;
  2369.     }
  2370.     
  2371.     // Associate application
  2372.     var mru, key = null, app = null;
  2373.     try
  2374.     {
  2375.         key = shell.RegRead("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\" + extension + "\\Application").toLowerCase();
  2376.         app = jsFullAppPath(shell, key);
  2377.     }
  2378.     catch (e)
  2379.     {
  2380.         try
  2381.         {
  2382.             mru = shell.RegRead("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\" + extension + "\\OpenWithList\\MRUList");
  2383.             for (var i = 0; i < mru.length; i++)
  2384.             {
  2385.                 key = shell.RegRead("HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\" + extension + "\\OpenWithList\\" + mru.substring(i, i + 1)).toLowerCase();
  2386.                 if (key != "iexplore.exe" && key.indexOf(".exe") > 0)
  2387.                     try
  2388.                     {
  2389.                         app = jsFullAppPath(shell, key);
  2390.                         break;
  2391.                     }
  2392.                     catch (e) {}
  2393.             }
  2394.         }
  2395.         catch (e) {}
  2396.     }
  2397.     
  2398.     if (app == null)
  2399.     {
  2400.         shell = null;
  2401.         
  2402.         link.click();
  2403.         return;
  2404.     }
  2405.     else
  2406.     {
  2407.         try
  2408.         {
  2409.             var ta = document.createElement("TEXTAREA");
  2410.             ta.innerText = url;
  2411.             ta.createTextRange().execCommand("Copy");
  2412.             
  2413.             switch (key)
  2414.             {
  2415.                 case "winword.exe":        app = new ActiveXObject("Word.Application");        app.Visible = true;    shell.AppActivate(app.Caption);    if (size != 0) app.Documents.Open(url); else { app.Documents.Add(); app.ActiveDocument.SaveAs(url); } break;
  2416.                 case "excel.exe":        app = new ActiveXObject("Excel.Application");        app.Visible = true;    shell.AppActivate(app.Caption);    if (size != 0) app.Workbooks.Open(url); else { app.Workbooks.Add(); app.ActiveWorkbook.SaveAs(url); } break;
  2417.                 case "acad.exe":        app = new ActiveXObject("AutoCAD.Application");        app.Visible = true;    shell.AppActivate(app.Caption);    if (size != 0) app.Documents.Open(url); else { app.Documents.Add(); app.ActiveDocument.SaveAs(url); } break;
  2418.                 case "photoshp.exe":    app = new ActiveXObject("Photoshop.Application");    app.Visible = true;    shell.AppActivate(app.Caption);    if (size != 0) app.Open(url); else { app.Documents.Add(4, 4); app.ActiveDocument.SaveAs(url); } break;
  2419.                 default:
  2420.                 {
  2421.                     var exec = shell.Exec(app);
  2422.                     alert(error2, "info", true);
  2423.                     
  2424.                     url = jsReplace(url, "}", "NGBRACKET");
  2425.                     url = jsReplace(url, "{", "{{}");
  2426.                     url = jsReplace(url, "NGBRACKET", "{}}");
  2427.                     url = jsReplace(url, "(", "{(}");
  2428.                     url = jsReplace(url, ")", "{)}");
  2429.                     url = jsReplace(url, "+", "{+}");
  2430.                     url = jsReplace(url, "^", "{^}");
  2431.                     url = jsReplace(url, "%", "{%}");
  2432.                     url = jsReplace(url, "~", "{~}");
  2433.                     
  2434.                     if (shell.AppActivate(exec.ProcessID))
  2435.                     {
  2436.                         shell.SendKeys("^o" + url);
  2437.                         if (key != "psp.exe") shell.SendKeys("{ENTER}");
  2438.                     }
  2439.                     
  2440.                     exec = shell = app = null;
  2441.                     window.close();
  2442.                     break;
  2443.                 }
  2444.             }
  2445.         }
  2446.         catch (e) { alert(e); }
  2447.         
  2448.         if (app != null)
  2449.         {
  2450.             app = shell = null;
  2451.             window.close();
  2452.         }
  2453.     }
  2454. }
  2455.  
  2456.  
  2457. // ----------------------------------------------------------------------------------------
  2458. // --- Picker
  2459. // ----------------------------------------------------------------------------------------
  2460. function jsPicker_ClientID(dbname, ids)
  2461. {
  2462.     for (var i = 0; i < ids.length; i++)
  2463.     {
  2464.         var s = ids[i].split(":");
  2465.         if (s[0] == dbname) return s[1];
  2466.     }
  2467. }
  2468.  
  2469. function jsPicker_Filter(hfIDs, dbnames, types, ddls)
  2470. {
  2471.     var ids = hfIDs.value.split(";");
  2472.     for (var i = 0; i < dbnames.length; i++)
  2473.     {
  2474.         var clientID = jsPicker_ClientID(dbnames[i], ids);
  2475.         var s = "";
  2476.         
  2477.         switch (types[i])
  2478.         {
  2479.             case "TextBox":
  2480.                 try { s = opener.document.forms[0][clientID].value; }
  2481.                 catch (e) {}
  2482.                 break;
  2483.             case "ComboBox":
  2484.                 try { s = ddl_SelectedItem_Value(opener.document.forms[0][clientID]); }
  2485.                 catch (e)
  2486.                 {
  2487.                     try { s = opener.document.forms[0][clientID].value; }
  2488.                     catch (e) {}
  2489.                 }
  2490.                 break;
  2491.             case "ListBox":
  2492.                 try { s = ddl_SelectedItem_Value(opener.document.forms[0][clientID]); }
  2493.                 catch (e) {}
  2494.                 break;
  2495.             case "Radio":
  2496.                 try { s = rbl_SelectedItem_Value(opener.document.forms[0][clientID]); }
  2497.                 catch (e) {}
  2498.                 break;
  2499.         }
  2500.         
  2501.         if (s != "") ddl_SelectText_NoChange(document.forms[0][ddls[i]], s);
  2502.     }
  2503. }