home *** CD-ROM | disk | FTP | other *** search
/ 66.142.0.142 / 66.142.0.142.tar / 66.142.0.142 / js / ewx7.js < prev    next >
Text File  |  2010-08-24  |  49KB  |  1,733 lines

  1. // JavaScript for ASP.NET Maker 7+
  2. // (C)2009 e.World Technology Ltd.
  3. // Page properties
  4.  
  5. var ewDialog;
  6. var ewUtil = YAHOO.util;
  7. var ewDom = YAHOO.util.Dom;
  8. var ewEvent = YAHOO.util.Event;
  9. var ewLang = YAHOO.lang;
  10. var ewConnect = YAHOO.util.Connect;
  11. var ewWidget = YAHOO.widget;
  12. var EW_TABLE_CLASS = "ewTable";
  13. var EW_TABLE_ROW_CLASSNAME = "ewTableRow";
  14. var EW_TABLE_ALT_ROW_CLASSNAME = "ewTableAltRow";
  15. var EW_ITEM_TEMPLATE_CLASSNAME = "ewTemplate";
  16. var EW_ITEM_TABLE_CLASSNAME = "ewItemTable";
  17. var EW_REPORT_CONTAINER_ID = "ewContainer";  
  18.  
  19. // ew_Page class
  20. // Page Object
  21. function ew_Page(name) {
  22.     this.Name = name;
  23.     this.PageID = "";
  24.  
  25.     // search highlight properties
  26.     this.ShowHighlightText = "Show highlight";
  27.     this.HideHighlightText = "Hide highlight";
  28.     this.SearchPanel = name + "_SearchPanel";
  29.     this.SearchButton = name + "_SearchImage";
  30.  
  31.     // validate function
  32.     this.ValidateRequired = true;
  33.  
  34.     // multi page properties
  35.     this.MultiPage = null;
  36.     this.TabView = null;
  37. }
  38.  
  39. // Include another client script
  40. function ew_ClientScriptInclude(path) {
  41.     document.write('<' + 'script');
  42.     document.write(' language="JavaScript"');
  43.     document.write(' type="text/javascript"');
  44.     document.write(' src="' + path + '">');
  45.     document.write('</' + 'script' + '>');
  46. }
  47.  
  48. //  Check if element value changed
  49. function ew_ValueChanged(fobj, infix, fld) {
  50.     var nelm = fobj.elements["x" + infix + "_" + fld];
  51.     var oelm = fobj.elements["o" + infix + "_" + fld];
  52.     if (oelm && nelm && (ew_GetValue(oelm) == ew_GetValue(nelm)))
  53.         return false;
  54.     else
  55.         return true;
  56. }
  57.  
  58. // Get form element value
  59. function ew_GetValue(obj) {
  60.     if (!obj)
  61.         return "";
  62.     if (!ew_HasValue(obj))
  63.         return "";
  64.     var type = (!obj.type && obj[0]) ? obj[0].type : obj.type;
  65.     if (type == "text" || type == "password" || type == "textarea" ||
  66.         type == "file" || type == "hidden") {
  67.         return (obj.value);
  68.     } else if (type == "select-one") {
  69.         return (obj.options[obj.selectedIndex].value);
  70.     } else if (type == "select-multiple") {
  71.         var selwrk = "";
  72.         for (var i=0; i < obj.options.length; i++) {
  73.             if (obj.options[i].selected) {
  74.                 if (selwrk != "") selwrk += ", ";
  75.                 selwrk += obj.options[i].value;
  76.             }
  77.         }
  78.         return selwrk;
  79.     } else if (type == "checkbox") {
  80.         if (obj[0]) {
  81.             var chkwrk = "";
  82.             for (var i=0; i < obj.length; i++) {
  83.                 if (obj[i].checked) {
  84.                     if (chkwrk != "") chkwrk += ", ";
  85.                     chkwrk += obj[i].value;
  86.                 }
  87.             }
  88.             return chkwrk;
  89.         }
  90.     } else if (type == "radio") {
  91.         if (obj[0]) {
  92.             var rdowrk = "";
  93.             for (var i=0; i < obj.length; i++) {
  94.                 if (obj[i].checked) {
  95.                     if (rdowrk != "") rdowrk += ", ";
  96.                     rdowrk += obj[i].value;
  97.                 }
  98.             }
  99.             return rdowrk;
  100.         } else {
  101.             return obj.value;
  102.         }
  103.     }
  104.     return "";
  105. }
  106.  
  107. // Handle search operator changed
  108. function ew_SrchOprChanged(id) {
  109.     var elem = document.getElementById(id);
  110.     var f = elem.form;
  111.     var isBetween = (elem.options[elem.selectedIndex].value == "BETWEEN");
  112.     var arEl;
  113.     arEl = document.getElementsByName("btw0_" + id.substr(2));
  114.     for (var i=0; i < arEl.length; i++)
  115.         arEl[i].style.display = (isBetween) ? "none" : "";
  116.     arEl = document.getElementsByName("btw1_" + id.substr(2));
  117.     for (var i=0; i < arEl.length; i++) {
  118.         arEl[i].style.display = (isBetween) ? "" : "none";
  119.         var arChildren = ewDom.getChildrenBy(arEl[i], function(El) { return typeof(El.disabled) != "undefined"; });
  120.         for (var j=0; j < arChildren.length; j++)
  121.             arChildren[j].disabled = !isBetween; 
  122.     }
  123. }
  124.  
  125. // DHTML editor
  126. function ew_DHTMLEditor(name, f) {
  127.     this.name = name;
  128.     this.create = (f) ? f : function() { this.active = true; };
  129.     this.editor = null;
  130.     this.active = false;
  131. }
  132.  
  133. // Create DHTML editor
  134. function ew_CreateEditor(name) {
  135.     if (typeof ew_DHTMLEditors == 'undefined')
  136.         return;
  137.     for (var i = 0; i < ew_DHTMLEditors.length; i++) {
  138.         var ed = ew_DHTMLEditors[i];
  139.         var cr = !ed.active;
  140.         if (name) cr = cr && ed.name == name;
  141.         if (cr) {
  142.             if (typeof ed.create == 'function')
  143.                 ed.create();
  144.             if (name)
  145.                 break;
  146.         }
  147.     }
  148. }
  149.  
  150. // Submit form
  151. function ew_SubmitForm(p, fobj) {
  152.     if (typeof ew_UpdateTextArea == 'function')
  153.         ew_UpdateTextArea();
  154.     var s = (p.ValidateRequired) ? p.ValidateForm(fobj) : true;
  155.     if (s) fobj.submit();
  156. }
  157.  
  158. // Submit search
  159. function ew_SubmitSearch(p, fobj) {
  160.     if (typeof ew_UpdateTextArea == 'function')
  161.         ew_UpdateTextArea();
  162.     var s = (p.ValidateRequired) ? p.ValidateSearch(fobj) : true;
  163.     if (s) fobj.submit();
  164. }
  165.  
  166. // Remove spaces
  167. function ew_RemoveSpaces(value) {
  168.     str = value.replace(/^\s*|\s*$/g, "");
  169.     str = str.toLowerCase();
  170.     if (str == "<p />" || str == "<p/>" || str == "<p>" ||
  171.         str == "<br />" || str == "<br/>" || str == "<br>" ||
  172.         str == " " || str == "<p> </p>")
  173.         return ""
  174.     else
  175.         return value;
  176. }
  177.  
  178. // Check if hidden text area
  179. function ew_IsHiddenTextArea(input_object) {
  180.     return (input_object && input_object.type && input_object.type == "textarea" &&
  181.         input_object.style && input_object.style.display &&
  182.         input_object.style.display == "none");
  183. }
  184.  
  185. // Set focus
  186. function ew_SetFocus(input_object) {
  187.     if (!input_object)
  188.         return;    
  189.     if (!input_object.type && input_object[0]) {    
  190.         for (var i=0; i < input_object.length; i++) {
  191.             if (input_object[i].value != "{value}") {
  192.                 input_object = input_object[i];
  193.                 break;
  194.             }
  195.         }
  196.     }
  197.     if (!input_object || !input_object.type)
  198.         return;
  199.     var type = input_object.type;
  200.     if (type == "textarea") {
  201.         if (ew_IsHiddenTextArea(input_object)) { // DHTML editor
  202.             if (typeof ew_FocusDHTMLEditor == "function")
  203.                 setTimeout("ew_FocusDHTMLEditor('" + input_object.id + "')", 500);
  204.         } else { // textarea
  205.             input_object.focus();
  206.             input_object.select();
  207.         }    
  208.         return;
  209.     } else if (type == "hidden") {
  210.         var asEl = ew_GetElements("sv_" + input_object.id); // Auto-Suggest
  211.         if (asEl && asEl.type && asEl.type == "text") {
  212.             asEl.focus();
  213.             asEl.select();
  214.         }
  215.         return; 
  216.     }
  217.     input_object.focus();
  218.     if (type == "text" || type == "password" || type == "file")
  219.         input_object.select();
  220. }
  221.  
  222. // Show error message
  223. function ew_OnError(page, input_object, error_message) {
  224.     alert(error_message); 
  225.     if (page && page.MultiPage) // check if multi-page
  226.         page.MultiPage.GotoPageByElement(input_object);
  227.     ew_SetFocus(input_object);
  228.     return false;
  229. }
  230.  
  231. // Check if object has value
  232. function ew_HasValue(obj) {
  233.     if (!obj)
  234.         return true;
  235.     var type = (!obj.type && obj[0]) ? obj[0].type : obj.type;
  236.     if (type == "text" || type == "password" || type == "textarea" ||
  237.         type == "file" || type == "hidden") {
  238.         return (obj.value.length != 0);
  239.     } else if (type == "select-one") {
  240.         return (obj.selectedIndex > 0);
  241.     } else if (type == "select-multiple") {
  242.         return (obj.selectedIndex > -1);
  243.     } else if (type == "checkbox") {
  244.         if (obj[0]) {
  245.             for (var i=0; i < obj.length; i++) {
  246.                 if (obj[i].value != "{value}" && obj[i].checked)
  247.                 return true;
  248.             }
  249.             return false;
  250.         }
  251.     } else if (type == "radio") {
  252.         if (obj[0]) {
  253.             for (var i=0; i < obj.length; i++) {
  254.                 if (obj[i].value != "{value}" && obj[i].checked)
  255.                 return true;
  256.             }
  257.             return false;
  258.         } else {
  259.             return (obj.value != "{value}" && obj.checked);
  260.         }
  261.     }
  262.     return true;
  263. }
  264.  
  265. // Get image width/height
  266. function ew_GetImageSize(file_object, width_object, height_object) {
  267.     if (document.all)    { // IE
  268.         myimage = new Image();
  269.         myimage.onload = function() {
  270.             width_object.value = myimage.width;
  271.             height_object.value = myimage.height;
  272.         }        
  273.         myimage.src = file_object.value;
  274.     }
  275. }
  276.  
  277. // Get Ctrl key for multiple column sort
  278. function ew_Sort(e, url, type) {
  279.     var newUrl = url
  280.     if (type == 2 && e.ctrlKey)
  281.         newUrl +=    "&ctrl=1";
  282.     location = newUrl;
  283.     return true;
  284. }
  285.  
  286. // Confirm message
  287. function ew_Confirm(msg) {
  288.     return confirm(msg);
  289. }
  290.  
  291. // Confirm Delete Message
  292. function ew_ConfirmDelete(msg, el) {
  293.     var del = confirm(msg);
  294.     if (!del)
  295.         ew_ClearDelete(el); // Clear delete status
  296.     return del;
  297. }
  298.  
  299. // Check if any key selected
  300. function ew_KeySelected(f) {
  301.     if (!f.key_m) return false;
  302.     if (f.key_m[0]) {
  303.         for (var i=0; i<f.key_m.length; i++)
  304.             if (f.key_m[i].checked) return true;
  305.     } else {
  306.         return f.key_m.checked;
  307.     }
  308.     return false;
  309. }
  310.  
  311. // Select all related checkboxes
  312. function ew_SelectAll(obj)    {
  313.     var f = obj.form;
  314.     var i, elm
  315.     for (i=0; i<f.elements.length; i++) {
  316.         elm = f.elements[i];
  317.         if (elm.type == "checkbox" && elm.name.substr(0, obj.name.length+1) == obj.name + "_") {
  318.             elm.checked = obj.checked;
  319.         }
  320.     }
  321. }
  322.  
  323. // Update selected checkbox
  324. function ew_UpdateSelected(f) {
  325.     var pfx = "u";
  326.     for (i=0; i<f.elements.length; i++) {
  327.         var elm = f.elements[i];
  328.         if (elm.type == "checkbox" && elm.name.substr(0, pfx.length+1) == pfx + "_") {
  329.             if (elm.checked) return true;
  330.         }
  331.     }
  332.     return false;
  333. }
  334.  
  335. // Set mouse over color
  336. function ew_MouseOver(ev, row) {
  337.     var tbl = ewDom.getAncestorByClassName(row, EW_TABLE_CLASS);
  338.     row.mouseover = true; // Mouse over
  339.     if (typeof(row.oClassName) == "undefined")
  340.         row.oClassName = row.className;
  341.     if (typeof(row.oCssText) == "undefined")
  342.         row.oCssText = row.style.cssText;
  343.     if (!row.selected) {
  344.         row.className = tbl.getAttribute("rowhighlightclass");
  345.         row.style.cssText = "";
  346.     }
  347. }
  348.  
  349. // Set mouse out color
  350. function ew_MouseOut(ev, row) {
  351.     row.mouseover = false; // Mouse out
  352.     if (!row.selected)
  353.         ew_SetColor(row);
  354. }
  355.  
  356. // Set row color
  357. function ew_SetColor(row) {
  358.     var tbl = ewDom.getAncestorByClassName(row, EW_TABLE_CLASS);
  359.     if (row.selected) {
  360.         if (typeof(row.oClassName) == "undefined")
  361.             row.oClassName = row.className;
  362.         if (typeof(row.oCssText) == "undefined")
  363.             row.oCssText = row.style.cssText;
  364.         row.className = tbl.getAttribute("rowselectclass");
  365.     } else if (row.edit) {
  366.         row.className = tbl.getAttribute("roweditclass");
  367.     } else {
  368.         if (typeof(row.oClassName) != "undefined")
  369.             row.className = row.oClassName;
  370.         if (typeof(row.oCssText) != "undefined")
  371.             row.style.cssText = row.oCssText;
  372.     }
  373. }
  374.  
  375. // Set selected row color
  376. function ew_Click(ev, row) {
  377.     var tbl = ewDom.getAncestorByClassName(row, EW_TABLE_CLASS);
  378.     if (row.deleteclicked) {
  379.         row.deleteclicked = false; // Reset delete button/checkbox clicked
  380.     } else {
  381.         var bselected = row.selected;
  382.         ew_ClearSelected(tbl); // Clear all other selected rows
  383.         if (!row.deleterow)
  384.             row.selected = !bselected; // Toggle
  385.         ew_SetColor(row);
  386.     }
  387. }
  388.  
  389. // Clear selected rows color
  390. function ew_ClearSelected(tbl) {
  391.     var row;
  392.     var cnt = tbl.rows.length;    
  393.     for (var i=0; i<cnt; i++) {
  394.         row = tbl.rows[i];
  395.         if (row.selected && !row.deleterow) {
  396.             row.selected = false;
  397.             ew_SetColor(row);
  398.         }
  399.     }
  400. }
  401.  
  402. // Clear all row delete status
  403. function ew_ClearDelete(el) {
  404.     var row;
  405.     var tbl = ewDom.getAncestorByClassName(el, EW_TABLE_CLASS);
  406.     var cnt = tbl.rows.length;
  407.     for (var i=0; i<cnt; i++) {
  408.         row = tbl.rows[i];
  409.         row.deleterow = false;
  410.     }
  411. }
  412.  
  413. // Click all delete button
  414. function ew_ClickAll(chkbox) {
  415.     var row;
  416.     var tbl = ewDom.getAncestorByClassName(chkbox, EW_TABLE_CLASS);
  417.     var cnt = tbl.tBodies[0].rows.length;
  418.     for (var i=0; i<cnt; i++) {
  419.         row = tbl.tBodies[0].rows[i];
  420.         row.selected = chkbox.checked;
  421.         row.deleterow = chkbox.checked;
  422.         ew_SetColor(row);
  423.     }
  424. }
  425.  
  426. // Click single delete link
  427. function ew_ClickDelete(a) {
  428.     var row;
  429.     var tbl = ewDom.getAncestorByClassName(a, EW_TABLE_CLASS);
  430.     ew_ClearSelected(tbl);
  431.     var cnt = tbl.rows.length;
  432.     for (var i=0; i<cnt; i++) {
  433.         row = tbl.rows[i];
  434.         if (row.mouseover) {
  435.             row.deleteclicked = true;
  436.             row.deleterow = true;
  437.             row.selected = true;
  438.             ew_SetColor(row);
  439.             break;
  440.         }
  441.     }
  442. }
  443.  
  444. // Click multiple checkbox
  445. function ew_ClickMultiCheckbox(chkbox) {
  446.     var row;
  447.     var tbl = ewDom.getAncestorByClassName(chkbox, EW_TABLE_CLASS);
  448.     ew_ClearSelected(tbl);
  449.     var cnt = tbl.rows.length;
  450.     for (var i=0; i<cnt; i++) {
  451.         row = tbl.rows[i];
  452.         if (row.mouseover) {
  453.             row.deleteclicked = true;
  454.             row.deleterow = chkbox.checked;
  455.             row.selected = chkbox.checked;
  456.             ew_SetColor(row);
  457.             break;
  458.         }
  459.     }
  460. }
  461.  
  462. // Get main form
  463. function ew_GetForm(id) {
  464.     var f = document.getElementById(id);
  465.     if (!f) f = document.getElementById("aspnetForm"); 
  466.     return f; 
  467. }
  468.  
  469. // Setup table
  470. function ew_SetupTable(tbl) {
  471.     if (!tbl)
  472.         return;
  473.     var isReport = ewDom.getAncestorBy(tbl, function(node) { return (node.id == EW_REPORT_CONTAINER_ID)});
  474.     var r, cnt;
  475.     cnt = tbl.rows.length;
  476.     for (var i=0; i < cnt; i++) {
  477.         r = tbl.rows[i];
  478.         r.cells[r.cells.length-1].style.borderRight = "0"; // last column
  479.     }
  480.     if (cnt > 0) {
  481.         r = tbl.rows[tbl.rows.length-1]; // last row
  482.         cnt = r.cells.length;
  483.         for (var i=0; i < cnt; i++)
  484.             r.cells[i].style.borderBottom = "0";
  485.     }
  486.     if (!isReport) {
  487.         cnt = tbl.tBodies[0].rows.length;
  488.         for (var i=0; i < cnt; i++) {
  489.             r = tbl.tBodies[0].rows[i];
  490.             if (r.className == "")
  491.                 r.className = (i % 2 == 0) ? EW_TABLE_ROW_CLASSNAME : EW_TABLE_ALT_ROW_CLASSNAME; // row color
  492.         }
  493.     }
  494. }
  495.  
  496. // Toggle highlight
  497. function ew_ToggleHighlight(p, lnk, name) {
  498.     if (!lnk || !document.getElementsByName)
  499.         return;
  500.     var elems = document.getElementsByName(name);
  501.     var i, el;
  502.     for (i=0; i<elems.length; i++) {
  503.         elem = elems[i];
  504.         elem.className = (elem.className == "") ? "ewHighlightSearch" : "";
  505.     }
  506.     lnk.innerHTML = (lnk.innerHTML == p.HideHighlightText) ? p.ShowHighlightText : p.HideHighlightText;
  507. }
  508.  
  509. // Html encode text
  510. function ew_HtmlEncode(text) {
  511.     var str = text;
  512.     str = str.replace(/&/g, '&');
  513.     str = str.replace(/\"/g, '"');
  514.     str = str.replace(/</g, '<');
  515.     str = str.replace(/>/g, '>'); 
  516.     return str;
  517. }
  518.  
  519. // Get element from form
  520. function ew_GetFormElement(f, name) {
  521.     for(var i=0; i<f.elements.length; i++) {
  522.         if(f.elements[i].name == name) {
  523.             return f.elements[i];
  524.         }
  525.     }
  526. }
  527.  
  528. // Extended basic search clear form
  529. function ew_ClearForm(objForm){
  530.     with (objForm) {
  531.         for (var i=0; i<elements.length; i++){
  532.             var tmpObj = eval(elements[i]);
  533.             if (tmpObj.type == "checkbox" || tmpObj.type == "radio"){
  534.                 tmpObj.checked = false;
  535.             } else if (tmpObj.type == "select-one"){
  536.                 tmpObj.selectedIndex = 0;
  537.             } else if (tmpObj.type == "select-multiple") {
  538.                 for (var j=0; j<tmpObj.options.length; j++)
  539.                     tmpObj.options[j].selected = false;
  540.             } else if (tmpObj.type == "text" || tmpObj.type == "textarea"){
  541.                 tmpObj.value = "";
  542.             }
  543.         }
  544.     }
  545. }
  546.  
  547. // Toggle search panel
  548. function ew_ToggleSearchPanel(p) {
  549.     if (!document.getElementById)
  550.         return;
  551.     var img = document.getElementById(p.SearchButton);
  552.     var p = document.getElementById(p.SearchPanel);
  553.     if (!p || !img)
  554.         return;
  555.     if (p.style.display == "") {
  556.         p.style.display = "none";
  557.         if (img.tagName == "IMG")
  558.             img.src = "images/expand.gif";
  559.     } else {
  560.         p.style.display = "";
  561.         if (img.tagName == "IMG")
  562.             img.src = "images/collapse.gif";
  563.     }
  564. }
  565.  
  566. // Functions for multi page
  567. function ew_MultiPage() {
  568.     if (!(document.getElementById || document.all))
  569.         return;        
  570.     this.PageIndex = 1;
  571.     this.MaxPageIndex = 0;
  572.     this.MinPageIndex = 0;
  573.     this.Elements = new Array();
  574.     this.AddElement = ew_MultiPageAddElement;
  575.     this.Init = ew_InitMultiPage;
  576.     this.ShowPage = ew_ShowPage;
  577.     this.EnableButtons = ew_EnableButtons;
  578.     this.GetPageIndexByElementId = ew_GetPageIndexByElementId;
  579.     this.GotoPageByIndex = ew_GotoPageByIndex;
  580.     this.GotoPageByElement = ew_GotoPageByElement;
  581.     this.FocusInvalidElement = ew_FocusInvalidElement;
  582.     this.TabView = null;
  583.     this.SubmitButton = null;
  584.     this.LastPageSubmit = false;
  585.     this.HideDisabledButton = true;
  586. }
  587.  
  588. // Multi page add element
  589. function ew_MultiPageAddElement(elemid, pageIndex) {
  590.     this.Elements.push([elemid, pageIndex]);
  591. }
  592.  
  593. // Multi page init
  594. function ew_InitMultiPage() {
  595.     for (var i=0; i<this.Elements.length; i++) {
  596.         if (this.Elements[i][1] > this.MaxPageIndex)
  597.             this.MaxPageIndex = this.Elements[i][1]; 
  598.     }    
  599.     this.MinPageIndex = this.MaxPageIndex;
  600.     for (var i=0; i<this.Elements.length; i++) {
  601.         if (this.Elements[i][1] < this.MinPageIndex)
  602.             this.MinPageIndex = this.Elements[i][1]; 
  603.     }
  604.  
  605.     // if ASP.NET 
  606.     if (typeof Page_ClientValidate == "function") {
  607.             original_Page_ClientValidate = Page_ClientValidate; 
  608.             Page_ClientValidate = function() { 
  609.             var isValid;
  610.             isValid = original_Page_ClientValidate();          
  611.             if (!isValid) 
  612.                 this.FocusInvalidElement();
  613.             return isValid; 
  614.         } 
  615.     }    
  616. }
  617.  
  618. //// Multi page show this page
  619. function ew_ShowPage() {
  620.     for (var i=0; i<this.Elements.length; i++) {
  621.         if (this.Elements[i][1] == this.PageIndex) {
  622.             ew_CreateEditor(this.Elements[i][0]);
  623.         }
  624.     }
  625.     this.EnableButtons();
  626. }
  627.  
  628. // Multi page enable buttons
  629. function ew_EnableButtons() {
  630.     if (this.SubmitButton) {
  631.         this.SubmitButton.disabled = (this.LastPageSubmit) ? (this.PageIndex != this.MaxPageIndex) : false;
  632.         if (this.SubmitButton.disabled) {
  633.             this.SubmitButton.style.display = (this.HideDisabledButton) ? "none" : "";
  634.         } else {
  635.             this.SubmitButton.style.display = "";    
  636.         }
  637.     }
  638. }
  639.  
  640. // Get page index by element id
  641. function ew_GetPageIndexByElementId(elemid) {
  642.     var pageIndex = -1;
  643.     for (var i=0; i<this.Elements.length; i++) {
  644.         if (this.Elements[i][0] == elemid)
  645.             return this.Elements[i][1];
  646.     }
  647.     return pageIndex;
  648. }
  649.  
  650. // Goto page by index
  651. function ew_GotoPageByIndex(pageIndex) {
  652.     if (pageIndex < this.MinPageIndex || pageIndex > this.MaxPageIndex)
  653.         return; 
  654.     this.PageIndex = pageIndex;
  655.     this.ShowPage();
  656. }
  657.  
  658. // Goto page by element
  659. function ew_GotoPageByElement(elem) {
  660.     var pageIndex;
  661.     if (!elem)
  662.         return;
  663.     var id = (!elem.type && elem[0]) ? elem[0].id : elem.id;
  664.     if (id == "")
  665.         return;
  666.     pageIndex = this.GetPageIndexByElementId(id);
  667.     if (pageIndex > -1) {
  668.         this.GotoPageByIndex(pageIndex);
  669.         if (this.TabView)
  670.             this.TabView.set("activeIndex", pageIndex - 1);
  671.     }
  672. }
  673.  
  674. // for ASP.NET
  675. // Focus invalid element
  676. function ew_FocusInvalidElement() {    
  677.      for (var i=0; i<Page_Validators.length; i++) {
  678.         if (!Page_Validators[i].isvalid) {
  679.             var elem = document.getElementById(Page_Validators[i].controltovalidate);
  680.             this.GotoPageByElement(elem);
  681.             ew_SetFocus(elem);
  682.             break;
  683.         }
  684.     }
  685. }
  686.  
  687. // get selection list as element or radio/checkbox list as array
  688. function ew_GetElements(name) {
  689.     var ar = document.getElementsByName(name);
  690.     if (ar.length == 1) {
  691.         var el = ar[0];
  692.         if (el.type && el.type != "checkbox" && el.type != "radio") 
  693.             return ar[0];
  694.     }    
  695.     return ar;
  696. }
  697.  
  698. // update multiple selection lists
  699. function ew_UpdateOpts(ar) {
  700.     if (ewLang.isArray(ar)) {
  701.         var u;
  702.         var cnt = ar.length;
  703.         for (i = 0; i < cnt; i++) {
  704.             u = ar[i];
  705.             if (ewLang.isBoolean(u[2]) && !u[2]) { // Ajax and sync
  706.                 u[0] = {id: u[0], values: ew_GetOptValues(ew_GetElements(u[0]))};
  707.                 u[1] = {id: u[1], values: ew_GetOptValues(ew_GetElements(u[1]))};
  708.             } else {
  709.                 ew_UpdateOpt(u[0], u[1], u[2], false);
  710.             }
  711.         }
  712.         for (i = 0; i < cnt; i++) {
  713.             u = ar[i];
  714.             if (ewLang.isBoolean(u[2]) && !u[2]) {
  715.                 ew_UpdateOpt(u[0], u[1], true, false);
  716.             }
  717.         }
  718.     }
  719. }
  720.  
  721. // update child element options
  722. function ew_UpdateOpt(id, parent_id, ds, updatechild) {
  723.     var iff = -1;
  724.     var oid, obj, ar, parentObj, arp;
  725.     if (ewLang.isString(id)) {
  726.         oid = id;
  727.         obj = ew_GetElements(id);
  728.         ar = ew_GetOptValues(obj);
  729.     } else if (ewLang.isObject(id)) {
  730.         oid = id.id;
  731.         obj = ew_GetElements(id.id);
  732.         ar = id.values;
  733.     }
  734.     if (ewLang.isString(parent_id)) {
  735.         parentObj = ew_GetElements(parent_id);
  736.         arp = ew_GetOptValues(parentObj);
  737.     } else if (ewLang.isObject(parent_id)) {
  738.         parentObj = ew_GetElements(parent_id.id);
  739.         arp = parent_id.values;
  740.         parent_id = parent_id.id;
  741.     }
  742.     var id = ew_GetId(obj);
  743.     ew_ClearOpt(obj);
  744.     var addOpt = function(aResults) {
  745.         var cnt = aResults.length;
  746.         for (var i=0; i<cnt; i++) {
  747.             if (iff == 3) {
  748.                 for (var j=0; j<arp.length; j++) {
  749.                     if (aResults[i][3].toUpperCase() == arp[j].toUpperCase()) {
  750.                         ew_NewOpt(obj, aResults[i][0], aResults[i][1], aResults[i][2]);
  751.                         break;
  752.                     }
  753.                 }
  754.             } else {
  755.                 ew_NewOpt(obj, aResults[i][0], aResults[i][1], aResults[i][2]);
  756.             }
  757.         }
  758.         if (obj.length) // radio/checkbox list
  759.             ew_RenderOpt(obj);
  760.         ew_SelectOpt(obj, ar);
  761.         if (updatechild != false) {
  762.             if (obj.options) {
  763.                 if (typeof(obj.onchange) == "function") obj.onchange();
  764.             } else if (obj.length) { // radio/checkbox list
  765.                 if (obj.length > 0) {
  766.                     var el = obj[0];
  767.                     if (typeof(el.onchange) == "function") el.onchange();
  768.                 }
  769.             }
  770.         }
  771.     }
  772.     if (ewLang.isArray(ds)) { // array => non-Ajax
  773.         iff = 3;
  774.         addOpt(ds);
  775.     } else if (ewLang.isBoolean(ds)) { // async => Ajax
  776.         var async = ds;
  777.         var f = ewDom.getAncestorByTagName(ewDom.get(oid), "FORM");
  778.         if (!f)
  779.             return;
  780.         var s = f.elements["s_" + id];
  781.         var lft = f.elements["lft_" + id];
  782.         if (!s || s.value == "")
  783.             return;
  784.         var cb = {
  785.             success: function(oResponse) {
  786.                 var txt = oResponse.responseText;
  787.                 if (txt.length > 0) {
  788.                     var newLength = txt.length - EW_RECORD_DELIMITER.length;
  789.                     if (txt.substr(newLength) == EW_RECORD_DELIMITER)
  790.                         txt = txt.substr(0, newLength);
  791.                     var aResults = [];
  792.                     var aRecords = txt.split(EW_RECORD_DELIMITER);
  793.                     for (var n = aRecords.length-1; n >= 0; n--)
  794.                         aResults[n] = aRecords[n].split(EW_FIELD_DELIMITER);
  795.                     addOpt(aResults);
  796.                 }
  797.             },
  798.             failure: function(oResponse) {
  799.             },
  800.             scope: this,
  801.             argument: null
  802.         }
  803.         var o = ewConnect.getConnectionObject(false);
  804.         if (o) {
  805.             var url = EW_LOOKUP_FILE_NAME + "?s=" + s.value + "&f=" + encodeURIComponent(arp.join(",")) +
  806.                 "&lft=" + encodeURIComponent(lft.value);
  807.             o.conn.open("get", url, async);
  808.             if (async)
  809.                 ewConnect.handleReadyState(o, cb);
  810.             o.conn.send(null);
  811.             if (!async)
  812.                 ewConnect.handleTransactionResponse(o, cb);
  813.         }
  814.     }
  815. }
  816.  
  817. // Render repeat column table (rowcnt is zero based row count)
  818. function ew_RepeatColumnTable(totcnt, rowcnt, repeatcnt, rendertype) {
  819.     var sWrk = "";
  820.     if (rendertype == 1) { // render start
  821.         if (rowcnt == 0)
  822.             sWrk += "<table class=\"" + EW_ITEM_TABLE_CLASSNAME + "\">";
  823.         if (rowcnt % repeatcnt == 0)
  824.             sWrk += "<tr>";
  825.         sWrk += "<td>";
  826.     } else if (rendertype == 2) { // render end
  827.         sWrk += "</td>";
  828.         if (rowcnt % repeatcnt == repeatcnt - 1) {
  829.             sWrk += "</tr>";
  830.         } else if (rowcnt == totcnt - 1) {
  831.             for (i = (rowcnt % repeatcnt) + 1; i < repeatcnt; i++)
  832.                 sWrk += "<td> </td>";
  833.             sWrk += "</tr>";
  834.         }
  835.         if (rowcnt == totcnt - 1) sWrk += "</table>";
  836.     }
  837.     return sWrk;
  838. }
  839.  
  840. // Get existing selected values
  841. function ew_GetOptValues(obj) {
  842.     var ar = [];
  843.     if (obj.options) { // selection list
  844.         for (i=0; i<obj.options.length; i++) {
  845.             if (obj.options[i].selected)
  846.                 ar.push(obj.options[i].value);
  847.         }
  848.     } else if (obj.length) { // radio/checkbox list
  849.         var i, el;        
  850.         var cnt = obj.length;        
  851.         for (i=0; i<cnt; i++) {
  852.             el = obj[i];
  853.             if (el.checked)
  854.                 ar.push(el.value);
  855.         }    
  856.     } else if (obj) { // radio/checkbox/text/hidden
  857.         ar.push(obj.value);
  858.     }
  859.     return ar;
  860. }
  861.  
  862. // Clear existing options
  863. function ew_ClearOpt(obj) {
  864.     if (obj.options) { // selection list
  865.         var lo = (obj.type == "select-multiple") ? 0 : 1;
  866.         for (var i=obj.length-1; i>=lo; i--)
  867.             obj.options[i] = null;
  868.     } else if (obj.length) { // radio/checkbox list
  869.         var id = ew_GetId(obj); 
  870.         var p = document.getElementById("dsl_" + id); // parent element
  871.         if (p) {
  872.             var els = ewDom.getChildrenBy(p, function(node) {
  873.                 return (node.tagName == "TABLE" && node.className == EW_ITEM_TABLE_CLASSNAME);
  874.             });            
  875.             for (var i=0; i<els.length; i++)
  876.                 p.removeChild(els[i]);
  877.             p._options = [];
  878.         }
  879.     }
  880. }
  881.  
  882. // Get the id or name of an element
  883. function ew_GetId(obj) {
  884.     var id = "";
  885.     if (!obj.options && obj.length)
  886.         obj = obj[0];
  887.     if (obj.id && obj.id != "") {
  888.         id = obj.id;
  889.     } else if (obj.name && obj.name != "") {
  890.         id = obj.name;
  891.     }
  892.     if (id.substr(id.length-2, 2) == "[]")
  893.         id = id.substr(0, id.length-2);     
  894.     return id;
  895. }
  896.  
  897. // Create combobox option 
  898. function ew_NewOpt(obj, value, text1, text2) {
  899.     var text = text1;
  900.     if (text2 && text2 != "")
  901.         text += EW_FIELD_SEP + text2;    
  902.     if (obj.options) { // selection list
  903.         var optionName = new Option(text, value, false, false)
  904.         obj.options[obj.length] = optionName;
  905.     } else if (obj.length) { // radio/checkbox list
  906.         var id = ew_GetId(obj); 
  907.         var p = document.getElementById("dsl_" + id); // get parent element        
  908.         if (p)
  909.             p._options.push({val:value, lbl:text});
  910.     }
  911. }
  912.  
  913. // Render the options
  914. function ew_RenderOpt(obj) {
  915.     var id = ew_GetId(obj); 
  916.     var p = document.getElementById("dsl_" + id); // parent element
  917.     var t = document.getElementById("tp_" + id); // get the item template    
  918.     if (!p || !p._options || !t)
  919.         return;
  920.     var cnt = p._options.length;
  921.     var cols = p.getAttribute("repeatcolumn");
  922.     if (!cols || cols == NaN || cols < 1)
  923.         cols = 5;
  924.     var tpl = t.innerHTML;         
  925.     var html = "";
  926.     var ihtml;
  927.     for (var i=0; i<cnt; i++) {
  928.         html += ew_RepeatColumnTable(cnt, i, cols, 1);
  929.         ihtml = tpl;        
  930.         ihtml = ihtml.replace(/(\"){0,1}{value}(\"){0,1}/g, "\"" + ew_HtmlEncode(p._options[i].val) + "\""); // replace value        
  931.         html += "<label>" + ihtml + p._options[i].lbl + "</label>";        
  932.         html += ew_RepeatColumnTable(cnt, i, cols, 2);        
  933.     } 
  934.     p.innerHTML += html;
  935.     p._options = [];        
  936. }
  937.  
  938. // Select combobox option
  939. function ew_SelectOpt(obj, value_array) {
  940.     if (!obj || !value_array)
  941.         return;
  942.     var i, j, cnt2, el;
  943.     var cnt = value_array.length; 
  944.     for (i=0; i<cnt; i++) {        
  945.         if (obj.options) { // listbox/combobox
  946.             cnt2 = obj.length;
  947.             for (j=0; j<cnt2; j++) {
  948.                 if (obj.options[j].value.toUpperCase() == value_array[i].toUpperCase()) {
  949.                     obj.options[j].selected = true;
  950.                     break;
  951.                 }
  952.             }
  953.         } else if (obj.length) { // radio/checkbox list
  954.             cnt2 = obj.length;
  955.             for (j=0; j<cnt2; j++) {
  956.                 if (obj[j].value.toUpperCase() == value_array[i].toUpperCase()) {
  957.                     obj[j].checked = true;
  958.                     break;
  959.                 }
  960.             }        
  961.         } else if (obj.type) {
  962.             obj.value = value_array.join(",");
  963.         }
  964.     }
  965.     if (obj.options && obj.getAttribute("autoselect") == "true") {
  966.         if (obj.type == "select-one" && obj.options.length == 2 &&
  967.             !obj.options[1].selected) {
  968.             obj.options[1].selected = true;
  969.         } else if (obj.type == "select-multiple" && obj.options.length == 1 &&
  970.             !obj.options[0].selected) {
  971.             obj.options[0].selected = true;
  972.         }
  973.     } else if (obj.length && obj.length == 2 && obj[0].getAttribute("autoselect") == "true") { // radio/checkbox list            
  974.         obj[1].checked = true;
  975.     }
  976. }
  977.  
  978. // Auto-Suggest
  979. function ew_AutoSuggest(elInput, elContainer, elSQL, elMessage, elValue, elParent, forceSelection) { 
  980.  
  981.     // Create DataSource
  982.     this.ds = new ewUtil.XHRDataSource(EW_LOOKUP_FILE_NAME);
  983.     this.ds.responseType = ewUtil.XHRDataSource.TYPE_TEXT;
  984.     this.ds.responseSchema = {
  985.         recordDelim: EW_RECORD_DELIMITER,
  986.         fieldDelim: EW_FIELD_DELIMITER
  987.     };
  988.     this.ds.maxCacheEntries = 0; // DO NOT CHANGE!        
  989.     this.ds.scriptQueryParam = "q";
  990.  
  991.     // create AutoComplete
  992.     this.ac = new ewWidget.AutoComplete(elInput, elContainer, this.ds);
  993.     this.ac._originalClearSelection = this.ac._clearSelection;
  994.     this.ac._as = this;
  995.     this.ac.useShadow = false;
  996.     this.ac.animVert = false;
  997.     this.ac.minQueryLength = 1;
  998.     this.ac.typeAhead = true;
  999.     this.ac.forceSelection = forceSelection;    
  1000.     this.ac.doBeforeExpandContainer = function(oTextbox, oContainer, sQuery, aResults) {
  1001.         var pos = ewDom.getXY(oTextbox);
  1002.         pos[1] += ewDom.get(oTextbox).offsetHeight + 1;
  1003.         ewDom.setXY(oContainer,pos);
  1004.         return true;
  1005.     };
  1006.  
  1007.     // if forceSelection
  1008.     this.ac._clearSelection = function() {
  1009.         if (this._elTextbox.value == "") {
  1010.             this._as.setValue("");
  1011.         } else {
  1012.             this._originalClearSelection();
  1013.         }
  1014.     }
  1015.  
  1016.     // format display value (Note: Override this function if link field <> display field)
  1017.     this.formatResult = function(ar) {
  1018.         return ar[0];
  1019.     };
  1020.  
  1021.     // set the key to the actual value field
  1022.     this.setValue = function(v) {
  1023.         if (elValue) {
  1024.             var el = ewDom.get(elValue);
  1025.             if (el) {
  1026.                 el.value = v;        
  1027.                 if (el.onchange)                    
  1028.                     el.onchange.call(el);
  1029.             }
  1030.         }    
  1031.     }
  1032.  
  1033.     // format result
  1034.     this.ac.formatResult = function(oResultItem, sQuery) {
  1035.  
  1036.         //var key = oResultItem[0];
  1037.         var lbl = this._as.formatResult(oResultItem);
  1038.  
  1039.         //oResultItem[0] = lbl;
  1040.         //oResultItem.push(key); // Save the key to last
  1041.  
  1042.         return lbl;
  1043.     };
  1044.  
  1045.     // generate request
  1046.     this.ac.generateRequest = function(sQuery) {
  1047.         this.dataSource.scriptQueryAppend = "s=" + ewDom.get(elSQL).value;
  1048.         if (elParent != "") {
  1049.             var arp = ew_GetOptValues(ew_GetElements(elParent));
  1050.             this.dataSource.scriptQueryAppend += "&f=" + encodeURIComponent(arp.join(","));
  1051.         }
  1052.         sQuery = (this.queryQuestionMark ? "?" : "") + (this.dataSource.scriptQueryParam || "query") + "=" + sQuery +
  1053.         (this.dataSource.scriptQueryAppend ? ("&" + this.dataSource.scriptQueryAppend) : "");
  1054.         return sQuery;
  1055.     };
  1056.  
  1057.     // update the key to the actual value field
  1058.     this.ac.itemSelectEvent.subscribe(function(type, e) {
  1059.         var ar = e[2];
  1060.         this._as.setValue(ar[0]);
  1061.         this._elTextbox.value = this._as.formatResult(ar);
  1062.     });
  1063.  
  1064.     // update the key to the actual value field
  1065.     this.ac.textboxFocusEvent.subscribe(function(type, e) {
  1066.         ewDom.removeClass(elInput, "ewUnmatched");
  1067.         ewDom.setStyle(elMessage, "display", "none");
  1068.     });
  1069.  
  1070.     // clear the actual value field
  1071.     if (forceSelection) {
  1072.         this.ac.selectionEnforceEvent.subscribe(function(type, e) {
  1073.             this._as.setValue("");
  1074.             ewDom.addClass(elInput, "ewUnmatched");
  1075.             ewDom.setStyle(elMessage, "display", "");
  1076.         });    
  1077.     } else {
  1078.         this.ac.unmatchedItemSelectEvent.subscribe(function(type, e) {
  1079.             this._as.setValue(this._elTextbox.value);    
  1080.         });
  1081.     }
  1082. }
  1083.  
  1084. // Init dialog
  1085. function ew_InitDialog() {
  1086.     ewDialog = new ewWidget.Dialog("ewAddOptDialog", { visible: false, constraintoviewport: true, hideaftersubmit: false, zIndex: 9000 }); 
  1087.     ewDialog.callback = { success: ew_AddOptHandleSuccess, failure: ew_DefaultHandleFailure };
  1088.  
  1089.     // Validate data
  1090.     ewDialog.validate = function() {
  1091.         var data = this.getData();
  1092.         var tablename = data.t;
  1093.  
  1094.         // Note: You can add your validation code here, return false if invalid, e.g.
  1095. // if (tablename == "xxx") {
  1096. // if (data.firstname == "" || data.lastname == "") {
  1097. // alert("Please enter your first and last names.");
  1098. // return false;
  1099. // }
  1100. // }
  1101.  
  1102.         return true;
  1103.     };
  1104.  
  1105. // ewDialog.beforeShowEvent.subscribe(function() {
  1106. // var w = this.header.offsetWidth;
  1107. // w = Math.max(w, this.body.offsetWidth);
  1108. // w = Math.max(w, this.footer.offsetWidth);
  1109. // this.header.style.width = w + "px";
  1110. // this.body.style.width = w + "px";
  1111. // this.footer.style.width = w + "px";
  1112. // });
  1113.  
  1114.     ewDialog.render();
  1115. }
  1116.  
  1117. function ew_DefaultHandleSubmit() {
  1118.     this.submit();
  1119. }
  1120.  
  1121. function ew_DefaultHandleCancel() {
  1122.     this.cancel();
  1123.     this.setBody("");    
  1124. }
  1125.  
  1126. function ew_DefaultHandleFailure(o) {
  1127.     ewDialog.hide();
  1128.     ewDialog.setBody("");
  1129.     alert("Server Error " + o.status + ": " + o.statusText);
  1130. }
  1131.  
  1132. function ew_AddOptHandleSuccess(o) {
  1133.     var results;
  1134.     if (o.responseXML)
  1135.         results = o.responseXML.getElementsByTagName("result");
  1136.     if (results && results.length > 0) {
  1137.         ewDialog.hide();
  1138.         ewDialog.setBody("");
  1139.         var xl;
  1140.         var result = results[0];
  1141.         var obj = ew_GetElements(o.argument.el);
  1142.         if (obj) {
  1143.             xl = result.getElementsByTagName(o.argument.lf);
  1144.             var lfv = (xl.length > 0 && xl[0].firstChild) ? xl[0].firstChild.nodeValue : "";
  1145.             xl = result.getElementsByTagName(o.argument.df);
  1146.             var dfv = (xl.length > 0 && xl[0].firstChild) ? xl[0].firstChild.nodeValue : "";
  1147.             var df2v = "";
  1148.             if (o.argument.df2 != "") {
  1149.                 xl = result.getElementsByTagName(o.argument.df2);
  1150.                 df2v = (xl.length > 0 && xl[0].firstChild) ? xl[0].firstChild.nodeValue : "";
  1151.             }
  1152.             var ffv = "";
  1153.             if (o.argument.ff != "") {
  1154.                 xl = result.getElementsByTagName(o.argument.ff);
  1155.                 ffv = (xl.length > 0 && xl[0].firstChild) ? xl[0].firstChild.nodeValue : "";
  1156.             }
  1157.             if (lfv != "" && dfv != "") {
  1158.                 if (o.argument.pg) { // non-Ajax
  1159.                     var elid = o.argument.el;
  1160.                     if (elid.substr(elid.length - 2, 2) == "[]") // PHP
  1161.                         elid = elid.substr(0, elid.length - 2);
  1162.                     var ar = o.argument.pg["ar_" + elid];
  1163.                     if (ar && ewLang.isArray(ar))
  1164.                         ar[ar.length] = [lfv, dfv, df2v, ffv];
  1165.                 }
  1166.                 var add = true;
  1167.  
  1168.                 // get the parent field value
  1169.                 if (o.argument.pf != "") {
  1170.                     var pobj = ew_GetElements(o.argument.pf);
  1171.                     var par = ew_GetOptValues(pobj);
  1172.                     var pcnt = par.length;
  1173.                     add = false;
  1174.                     for (var i=0; i<pcnt; i++) {
  1175.                         if (par[i] == ffv) {
  1176.                             add = true;
  1177.                             break;
  1178.                         }
  1179.                     }
  1180.                 }
  1181.                 if (add) { // add the new option
  1182.                     if (!obj.options && obj.length) { // radio/checkbox list
  1183.                         var id = ew_GetId(obj);
  1184.                         var p = document.getElementById("dsl_" + id); // parent element
  1185.                         if (!p)
  1186.                             return;
  1187.                         var ar = [];
  1188.                         var vals = [];
  1189.                         var cnt = obj.length;
  1190.                         for (var i=0; i<cnt; i++) {
  1191.                             if (obj[i].type == "checkbox" && obj[i].checked)
  1192.                                 vals.push(obj[i].value);
  1193.                             if (obj[i].nextSibling)
  1194.                                 ar.push({val: obj[i].value, lbl: obj[i].nextSibling.nodeValue});
  1195.                         }
  1196.                         ew_ClearOpt(obj);
  1197.                         p._options = ar;
  1198.                     }
  1199.                     ew_NewOpt(obj, lfv, dfv, df2v);
  1200.                     if (obj.options) {
  1201.                         obj.options[obj.options.length-1].selected = true;
  1202.                         if (obj.onchange)
  1203.                             obj.onchange.call(obj);
  1204.                         obj.focus();
  1205.                     } else if (obj.length) { // radio/checkbox list
  1206.                         ew_RenderOpt(obj);
  1207.                         if (vals.length > 0)
  1208.                             ew_SelectOpt(obj, vals);
  1209.                         var obj = ew_GetElements(o.argument.el);
  1210.                         if (obj.length > 0) {
  1211.                             var el = obj[obj.length-1];
  1212.                             el.checked = true;
  1213.                             if (el.type == "radio")
  1214.                                 el.onclick.call(el);
  1215.                             el.focus();
  1216.                         }
  1217.                     }
  1218.                 }
  1219.             }
  1220.         }
  1221.     } else {
  1222.         ewDialog.setBody(o.responseText);
  1223.     }
  1224. }
  1225.  
  1226. // Show dialog
  1227. // argument object members:
  1228. // pg - page
  1229. // lnk - add option link id
  1230. // el - form element id
  1231. // url - URL of the Add form 
  1232. // hdr - dialog header
  1233. // lf - link field
  1234. // df - display field
  1235. // df2 - display field 2
  1236. // pf - parent field
  1237. // ff - filter field
  1238. function ew_AddOptDialogShow(oArg) {
  1239.     if (ewDialog && ewDialog.cfg.getProperty("visible")) ewDialog.hide();
  1240.     var f = {
  1241.         success: function(o) {
  1242.             if (ewDialog) {
  1243.  
  1244.                 // get the parent field value
  1245.                 var obj = ew_GetElements(o.argument.pf);
  1246.                 var ar = ew_GetOptValues(obj);
  1247.                 var cfg = { context: [o.argument.lnk, "tl", "bl"],
  1248.                     buttons: [ { text:EW_BUTTON_SUBMIT_TEXT, handler:ew_DefaultHandleSubmit, isDefault:true },
  1249.                         { text:EW_BUTTON_CANCEL_TEXT, handler:ew_DefaultHandleCancel } ]
  1250.                 };
  1251.                 ewDialog.cfg.applyConfig(cfg);
  1252.                 ewDialog.callback.argument = o.argument;
  1253.                 if (ewDialog.header) ewDialog.header.style.width = "auto";
  1254.                 if (ewDialog.body) ewDialog.body.style.width = "auto";
  1255.                 if (ewDialog.footer) ewDialog.footer.style.width = "auto";
  1256.                 ewDialog.setBody(o.responseText);
  1257.                 ewDialog.setHeader(o.argument.hdr);
  1258.                 ewDialog.render();
  1259.                 ewDialog.registerForm(); // make sure the form is registered (otherwise, the form is not registered in the first time)
  1260.  
  1261.                 // set the filter field value
  1262.                 if (ar.length == 1 && o.argument.ff != "" && ewDialog.form && ewDialog.form.elements[o.argument.ff])
  1263.                     ew_SelectOpt(ewDialog.form.elements[o.argument.ff], ar);
  1264.                 ewDialog.show();
  1265.             }
  1266.         },
  1267.         failure: function(oResponse) {
  1268.         },
  1269.         scope: this,
  1270.         argument: oArg
  1271.     }
  1272.     ewConnect.asyncRequest("get", oArg.url, f, null);
  1273. }
  1274.  
  1275. // Auto fill text boxes by AJAX
  1276. function ew_AjaxAutoFill(obj) {
  1277.     if (ewLang.isString(obj))
  1278.         obj = ew_GetElements(obj);
  1279.     var ar = ew_GetOptValues(obj);
  1280.     var id = ew_GetId(obj);
  1281.     var sf = document.getElementById("sf_" + id);
  1282.     if (ar.length < 1 || ar[0] == "" || !sf || sf.value == "")
  1283.         return;
  1284.     var ds = new ewUtil.XHRDataSource(EW_LOOKUP_FILE_NAME);
  1285.     ds.responseSchema.recordDelim = EW_RECORD_DELIMITER;
  1286.     ds.responseSchema.fieldDelim = EW_FIELD_DELIMITER;
  1287.     ds.responseType = ewUtil.DataSourceBase.TYPE_TEXT;
  1288.     ds.maxCacheEntries = 0; // DO NOT CHANGE!
  1289.     var f = function(oRequest, oParsedResponse) {
  1290.         var aResults = oParsedResponse.results;
  1291.         var id = ew_GetId(this);
  1292.         var dn = document.getElementById("ln_" + id);
  1293.         var destNames = (dn) ? dn.value : "";
  1294.         var dest_array = destNames.split(",");
  1295.         var destEl, asEl, dfv;
  1296.         for (var j=0; j < dest_array.length; j++) {
  1297.             destEl = ew_GetElements(dest_array[j]);
  1298.             if (destEl && j < aResults[0].length) {
  1299.                 dfv = aResults[0][j];
  1300.                 if (destEl.options || destEl.length) {
  1301.                     ew_SelectOpt(destEl, ar);
  1302.                 } else if (destEl.type == "hidden") {
  1303.                     asEl = ew_GetElements("sv_" + dest_array[j]);
  1304.                     if (asEl) {
  1305.                         destEl.value = ar[0];
  1306.                         asEl.value = dfv;
  1307.                     } else {
  1308.                         destEl.value = dfv;
  1309.                     }
  1310.                 } else if (destEl.type == "textarea") {
  1311.                     destEl.value = dfv;
  1312.                     if (typeof ew_UpdateDHTMLEditor == "function")
  1313.                         ew_UpdateDHTMLEditor(dest_array[j]);
  1314.                 } else {
  1315.                     destEl.value = dfv;
  1316.                 }
  1317.             }
  1318.         }
  1319.     }
  1320.     var sQuery = "?q=" + encodeURIComponent(ar[0]) + "&s=" + sf.value;
  1321.     ds.sendRequest(sQuery, f, obj);
  1322. }
  1323.  
  1324. // Check US Date format (mm/dd/yyyy)
  1325. function ew_CheckUSDate(object_value) {
  1326.     if (object_value == null)
  1327.         return true;
  1328.     if (object_value.length == 0)
  1329.         return true;
  1330.     isplit = object_value.indexOf(EW_DATE_SEPARATOR); // Split by date separator
  1331.     if (isplit == -1 || isplit == object_value.length)
  1332.         return false;
  1333.     sMonth = object_value.substring(0, isplit);
  1334.     if (sMonth.length == 0)
  1335.         return false;
  1336.     isplit = object_value.indexOf(EW_DATE_SEPARATOR, isplit + 1); // Split by date separator
  1337.     if (isplit == -1 || (isplit + 1 ) == object_value.length)
  1338.         return false;
  1339.     sDay = object_value.substring((sMonth.length + 1), isplit);
  1340.     if (sDay.length == 0)
  1341.         return false;
  1342.     isep = object_value.indexOf(' ', isplit + 1); 
  1343.     if (isep == -1) {
  1344.         sYear = object_value.substring(isplit + 1);
  1345.     } else {
  1346.         sYear = object_value.substring(isplit + 1, isep);
  1347.         sTime = object_value.substring(isep + 1);
  1348.         if (!ew_CheckTime(sTime)) // Check time
  1349.             return false; 
  1350.     }
  1351.     if (!ew_CheckInteger(sMonth))
  1352.         return false;
  1353.     else if (!ew_CheckRange(sMonth, 1, 12))
  1354.         return false;
  1355.     else if (!ew_CheckInteger(sYear))
  1356.         return false;
  1357.     else if (!ew_CheckRange(sYear, 0, 9999))
  1358.         return false;
  1359.     else if (!ew_CheckInteger(sDay))
  1360.         return false;
  1361.     else if (!ew_CheckDay(sYear, sMonth, sDay))
  1362.         return false;
  1363.     else
  1364.         return true;
  1365. }
  1366.  
  1367. // Check Date format (yyyy/mm/dd)
  1368. function ew_CheckDate(object_value) {
  1369.     if (object_value == null)
  1370.         return true;
  1371.     if (object_value.length == 0)
  1372.         return true;
  1373.     isplit = object_value.indexOf(EW_DATE_SEPARATOR); // Split by date separator
  1374.     if (isplit == -1 || isplit == object_value.length)
  1375.         return false;
  1376.     sYear = object_value.substring(0, isplit);
  1377.     isplit = object_value.indexOf(EW_DATE_SEPARATOR, isplit + 1); // Split by date separator
  1378.     if (isplit == -1 || (isplit + 1 ) == object_value.length)
  1379.         return false;
  1380.     sMonth = object_value.substring((sYear.length + 1), isplit);
  1381.     if (sMonth.length == 0)
  1382.         return false;
  1383.     isep = object_value.indexOf(' ', isplit + 1); 
  1384.     if (isep == -1) {
  1385.         sDay = object_value.substring(isplit + 1);
  1386.     } else {
  1387.         sDay = object_value.substring(isplit + 1, isep);
  1388.         sTime = object_value.substring(isep + 1);
  1389.         if (!ew_CheckTime(sTime)) // Check time
  1390.             return false; 
  1391.     }
  1392.     if (sDay.length == 0)
  1393.         return false;
  1394.     if (!ew_CheckInteger(sMonth))
  1395.         return false;
  1396.     else if (!ew_CheckRange(sMonth, 1, 12))
  1397.         return false;
  1398.     else if (!ew_CheckInteger(sYear))
  1399.         return false;
  1400.     else if (!ew_CheckRange(sYear, 0, 9999))
  1401.         return false;
  1402.     else if (!ew_CheckInteger(sDay))
  1403.         return false;
  1404.     else if (!ew_CheckDay(sYear, sMonth, sDay))
  1405.         return false;
  1406.     else
  1407.         return true;
  1408. }
  1409.  
  1410. // Check Euro Date format (dd/mm/yyyy)
  1411. function ew_CheckEuroDate(object_value) {
  1412.     if (object_value == null)
  1413.         return true;
  1414.     if (object_value.length == 0)
  1415.       return true;
  1416.     isplit = object_value.indexOf(EW_DATE_SEPARATOR); // Split by date separator
  1417.     if (isplit == -1 || isplit == object_value.length)
  1418.         return false;
  1419.     sDay = object_value.substring(0, isplit);
  1420.     monthSplit = isplit + 1;
  1421.     isplit = object_value.indexOf(EW_DATE_SEPARATOR, monthSplit); // Split by date separator
  1422.     if (isplit == -1 ||  (isplit + 1 )  == object_value.length)
  1423.         return false;
  1424.     sMonth = object_value.substring((sDay.length + 1), isplit);
  1425.     isep = object_value.indexOf(' ', isplit + 1); 
  1426.     if (isep == -1) {
  1427.         sYear = object_value.substring(isplit + 1);
  1428.     } else {
  1429.         sYear = object_value.substring(isplit + 1, isep);
  1430.         sTime = object_value.substring(isep + 1);
  1431.         if (!ew_CheckTime(sTime))
  1432.             return false; 
  1433.     }
  1434.     if (!ew_CheckInteger(sMonth))
  1435.         return false;
  1436.     else if (!ew_CheckRange(sMonth, 1, 12))
  1437.         return false;
  1438.     else if (!ew_CheckInteger(sYear))
  1439.         return false;
  1440.     else if (!ew_CheckRange(sYear, 0, null))
  1441.         return false;
  1442.     else if (!ew_CheckInteger(sDay))
  1443.         return false;
  1444.     else if (!ew_CheckDay(sYear, sMonth, sDay))
  1445.         return false;
  1446.     else
  1447.         return true;
  1448. }
  1449.  
  1450. // Check day
  1451. function ew_CheckDay(checkYear, checkMonth, checkDay) {
  1452.     maxDay = 31;
  1453.     if (checkMonth == 4 || checkMonth == 6 ||    checkMonth == 9 || checkMonth == 11) {
  1454.         maxDay = 30;
  1455.     } else if (checkMonth == 2)    {
  1456.         if (checkYear % 4 > 0)
  1457.             maxDay =28;
  1458.         else if (checkYear % 100 == 0 && checkYear % 400 > 0)
  1459.             maxDay = 28;
  1460.         else
  1461.             maxDay = 29;
  1462.     }
  1463.     return ew_CheckRange(checkDay, 1, maxDay);
  1464. }
  1465.  
  1466. // Check integer
  1467. function ew_CheckInteger(object_value) {
  1468.     if (object_value == null)
  1469.         return true;
  1470.     if (object_value.length == 0)
  1471.         return true;
  1472.     var decimal_format = ".";
  1473.     var check_char;
  1474.     check_char = object_value.indexOf(decimal_format);
  1475.     if (check_char < 1)
  1476.         return ew_CheckNumber(object_value);
  1477.     else
  1478.         return false;
  1479. }
  1480.  
  1481. // Check number range
  1482. function ew_NumberRange(object_value, min_value, max_value) {
  1483.     if (min_value != null) {
  1484.         if (object_value < min_value)
  1485.             return false;
  1486.     }
  1487.     if (max_value != null) {
  1488.         if (object_value > max_value)
  1489.             return false;
  1490.     }
  1491.     return true;
  1492. }
  1493.  
  1494. // Check number
  1495. function ew_CheckNumber(object_value) {
  1496.     if (object_value == null)
  1497.         return true;
  1498.     if (object_value.length == 0)
  1499.         return true;
  1500.     var start_format = " .+-0123456789";
  1501.     var number_format = " .0123456789";
  1502.     var check_char;
  1503.     var decimal = false;
  1504.     var trailing_blank = false;
  1505.     var digits = false;
  1506.     check_char = start_format.indexOf(object_value.charAt(0));
  1507.     if (check_char == 1)
  1508.         decimal = true;
  1509.     else if (check_char < 1)
  1510.         return false;
  1511.     for (var i = 1; i < object_value.length; i++)    {
  1512.         check_char = number_format.indexOf(object_value.charAt(i))
  1513.         if (check_char < 0) {
  1514.             return false;
  1515.         } else if (check_char == 1)    {
  1516.             if (decimal)
  1517.                 return false;
  1518.             else
  1519.                 decimal = true;
  1520.         } else if (check_char == 0) {
  1521.             if (decimal || digits)    
  1522.             trailing_blank = true;
  1523.         }    else if (trailing_blank) { 
  1524.             return false;
  1525.         } else {
  1526.             digits = true;
  1527.         }
  1528.     }    
  1529.     return true;
  1530. }
  1531.  
  1532. // Check range
  1533. function ew_CheckRange(object_value, min_value, max_value) {
  1534.     if (object_value == null)
  1535.         return true;
  1536.     if (object_value.length == 0)
  1537.         return true;
  1538.     if (!ew_CheckNumber(object_value))
  1539.         return false;
  1540.     else
  1541.         return (ew_NumberRange((eval(object_value)), min_value, max_value));
  1542.     return true;
  1543. }
  1544.  
  1545. // Check time
  1546. function ew_CheckTime(object_value) {
  1547.     var delimn
  1548.     if (object_value == null)
  1549.         return true;
  1550.     if (object_value.length == 0)
  1551.         return true;
  1552.     isplit = object_value.indexOf(':');
  1553.     if (isplit == -1 || isplit == object_value.length)
  1554.         return false;
  1555.     sHour = object_value.substring(0, isplit);
  1556.     iminute = object_value.indexOf(delimn, isplit + 1);
  1557.     if (iminute == -1 || iminute == object_value.length)
  1558.         sMin = object_value.substring((sHour.length + 1));
  1559.     else
  1560.         sMin = object_value.substring((sHour.length + 1), iminute);
  1561.     if (!ew_CheckInteger(sHour))
  1562.         return false;
  1563.     else if (!ew_CheckRange(sHour, 0, 23))
  1564.         return false;
  1565.     if (!ew_CheckInteger(sMin))
  1566.         return false;
  1567.     else if (!ew_CheckRange(sMin, 0, 59))
  1568.         return false;
  1569.     if (iminute != -1) {
  1570.         sSec = object_value.substring(iminute + 1);        
  1571.         if (!ew_CheckInteger(sSec))
  1572.             return false;
  1573.         else if (!ew_CheckRange(sSec, 0, 59))
  1574.             return false;    
  1575.     }
  1576.     return true;
  1577. }
  1578.  
  1579. // Check phone
  1580. function ew_CheckPhone(object_value) {
  1581.     if (object_value == null)
  1582.         return true;
  1583.     if (object_value.length == 0)
  1584.         return true;
  1585.     if (object_value.length != 12)
  1586.         return false;
  1587.     if (!ew_CheckNumber(object_value.substring(0,3)))
  1588.         return false;
  1589.     else if (!ew_NumberRange((eval(object_value.substring(0,3))), 100, 1000))
  1590.         return false;
  1591.     if (object_value.charAt(3) != "-" && object_value.charAt(3) != " ")
  1592.         return false
  1593.     if (!ew_CheckNumber(object_value.substring(4,7)))
  1594.         return false;
  1595.     else if (!ew_NumberRange((eval(object_value.substring(4,7))), 100, 1000))
  1596.         return false;
  1597.     if (object_value.charAt(7) != "-" && object_value.charAt(7) != " ")
  1598.         return false;
  1599.     if (object_value.charAt(8) == "-" || object_value.charAt(8) == "+")
  1600.         return false;
  1601.     else
  1602.         return (ew_CheckInteger(object_value.substring(8,12)));
  1603. }
  1604.  
  1605. // Check zip
  1606. function ew_CheckZip(object_value) {
  1607.     if (object_value == null)
  1608.         return true;
  1609.     if (object_value.length == 0)
  1610.         return true;
  1611.     if (object_value.length != 5 && object_value.length != 10)
  1612.         return false;
  1613.     if (object_value.charAt(0) == "-" || object_value.charAt(0) == "+")
  1614.         return false;
  1615.     if (!ew_CheckInteger(object_value.substring(0,5)))
  1616.         return false;
  1617.     if (object_value.length == 5)
  1618.         return true;
  1619.     if (object_value.charAt(5) != "-" && object_value.charAt(5) != " ")
  1620.         return false;
  1621.     if (object_value.charAt(6) == "-" || object_value.charAt(6) == "+")
  1622.         return false;
  1623.     return (ew_CheckInteger(object_value.substring(6,10)));
  1624. }
  1625.  
  1626. // Check credit card
  1627. function ew_CheckCreditCard(object_value) {
  1628.     var white_space = " -";
  1629.     var creditcard_string = "";
  1630.     var check_char;
  1631.     if (object_value == null)
  1632.         return true;
  1633.     if (object_value.length == 0)
  1634.         return true;
  1635.     for (var i = 0; i < object_value.length; i++) {
  1636.         check_char = white_space.indexOf(object_value.charAt(i));
  1637.         if (check_char < 0)
  1638.             creditcard_string += object_value.substring(i, (i + 1));
  1639.     }    
  1640.     if (creditcard_string.length == 0)
  1641.         return false;     
  1642.     if (creditcard_string.charAt(0) == "+")
  1643.         return false;
  1644.     if (!ew_CheckInteger(creditcard_string))
  1645.         return false;
  1646.     var doubledigit = creditcard_string.length % 2 == 1 ? false : true;
  1647.     var checkdigit = 0;
  1648.     var tempdigit;
  1649.     for (var i = 0; i < creditcard_string.length; i++) {
  1650.         tempdigit = eval(creditcard_string.charAt(i));        
  1651.         if (doubledigit) {
  1652.             tempdigit *= 2;
  1653.             checkdigit += (tempdigit % 10);            
  1654.             if ((tempdigit / 10) >= 1.0)
  1655.                 checkdigit++;            
  1656.             doubledigit = false;
  1657.         }    else {
  1658.             checkdigit += tempdigit;
  1659.             doubledigit = true;
  1660.         }
  1661.     }
  1662.     return (checkdigit % 10) == 0 ? true : false;
  1663. }
  1664.  
  1665. // Check social security number
  1666. function ew_CheckSSC(object_value) {
  1667.     var white_space = " -+.";
  1668.     var ssc_string="";
  1669.     var check_char;
  1670.     if (object_value == null)
  1671.         return true;
  1672.     if (object_value.length == 0)
  1673.         return true;
  1674.     if (object_value.length != 11)
  1675.         return false;
  1676.     if (object_value.charAt(3) != "-" && object_value.charAt(3) != " ")
  1677.         return false;
  1678.     if (object_value.charAt(6) != "-" && object_value.charAt(6) != " ")
  1679.         return false;
  1680.     for (var i = 0; i < object_value.length; i++) {
  1681.         check_char = white_space.indexOf(object_value.charAt(i));
  1682.         if (check_char < 0)
  1683.             ssc_string += object_value.substring(i, (i + 1));
  1684.     }    
  1685.     if (ssc_string.length != 9)
  1686.         return false;     
  1687.     if (!ew_CheckInteger(ssc_string))
  1688.         return false;
  1689.     return true;
  1690. }
  1691.  
  1692. // Check email
  1693. function ew_CheckEmail(object_value) {
  1694.     if (object_value == null)
  1695.         return true;
  1696.     if (object_value.length == 0)
  1697.         return true;
  1698.     if (!(object_value.indexOf("@") > -1 && object_value.indexOf(".") > -1))
  1699.         return false;    
  1700.     return true;
  1701. }
  1702.  
  1703. // Check GUID {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}    
  1704. function ew_CheckGUID(object_value) {
  1705.     if (object_value == null)
  1706.         return true;
  1707.     if (object_value.length == 0)
  1708.         return true;
  1709.     object_value = object_value.replace(/^\s*|\s*$/g, "");
  1710.     var re1 = new RegExp("^(\{{1}([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}\}{1})$");
  1711.     var re2 = new RegExp("^(([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12})$");
  1712.     return re1.test(object_value) || re2.test(object_value);
  1713. }
  1714.  
  1715. // Check file extension
  1716. function ew_CheckFileType(object_value) {
  1717.     if (object_value == null)
  1718.         return true;
  1719.     if (object_value.length == 0)
  1720.         return true;
  1721.     if (typeof EW_UPLOAD_ALLOWED_FILE_EXT == "undefined")
  1722.         return true;
  1723.     if (EW_UPLOAD_ALLOWED_FILE_EXT == "")
  1724.         return true;
  1725.     var fileTypes = EW_UPLOAD_ALLOWED_FILE_EXT.split(",");
  1726.     var ext = object_value.substring(object_value.lastIndexOf(".")+1, object_value.length).toLowerCase(); 
  1727.     for (var i=0; i < fileTypes.length; i++) { 
  1728.         if (fileTypes[i] == ext) 
  1729.             return true; 
  1730.     } 
  1731.     return false; 
  1732. }
  1733.