home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Servidores / xampp-win32-1.6.7-installer.exe / phpMyAdmin / pmd / scripts / move.js < prev   
Encoding:
JavaScript  |  2008-06-23  |  31.7 KB  |  924 lines

  1. /* vim: set expandtab sw=4 ts=4 sts=4: */
  2. /**
  3.  * @version $Id: move.js 10416 2007-05-30 16:55:18Z lem9 $
  4.  * @author  Ivan A Kirillov (Ivan.A.Kirillov@gmail.com)
  5.  * @package phpMyAdmin-Designer
  6.  */
  7.  
  8. /**
  9.  * init
  10.  */
  11. var dx, dy, dy2;
  12. var cur_click;
  13. // update in Main()
  14. var sm_x = 2, sm_y = 2;
  15. var sm_s           = 0;
  16. var sm_add         = 10;
  17. var s_left         = 0;
  18. var s_right        = 0;
  19. var ON_relation    = 0;
  20. var ON_grid        = 0;
  21. var ON_display_field = 0;
  22. // relation_style: 0 - angular 1 - direct
  23. var ON_angular_direct = 1;
  24. var click_field    = 0;
  25. var link_relation  = "";
  26. var id_hint;
  27. var canvas_width   = 0;
  28. var canvas_height  = 0;
  29. var osn_tab_width  = 0;
  30. var osn_tab_height = 0;
  31. var height_field   = 7;
  32. var Glob_X, Glob_Y;
  33. var timeoutID;
  34. var layer_menu_cur_click = 0;
  35. var step = 10;
  36. var old_class;
  37.  
  38. //------------------------------------------------------------------------------
  39. //------------------------------------------------------------------------------
  40. //------------------------------------------------------------------------------
  41.  
  42.  
  43. //window.captureEvents(Event.MOUSEDOWN | Event.MOUSEUP);
  44. //---CROSS
  45. document.onmousedown = MouseDown;
  46. document.onmouseup   = MouseUp;
  47. document.onmousemove = MouseMove;
  48.  
  49. var isIE = document.all && !window.opera;
  50. var isNN = !document.all && document.getElementById;
  51. var isN4 = document.layers;
  52.  
  53. if (isIE) {
  54.     window.onscroll = General_scroll;
  55.     document.onselectstart = function () {return false;};
  56. }
  57.  
  58. //document.onmouseup = function(){General_scroll_end();}
  59. function MouseDown(e)
  60. {
  61.     var offsetx, offsety;
  62.     if (cur_click != null) {
  63.         offsetx = isIE ? event.clientX + document.body.scrollLeft : e.pageX;
  64.         offsety = isIE ? event.clientY + document.body.scrollTop : e.pageY;
  65.         dx = offsetx - parseInt(cur_click.style.left);
  66.         dy = offsety - parseInt(cur_click.style.top);
  67.         //alert(" dx = " + dx + " dy = " +dy);
  68.         document.getElementById("canvas").style.visibility = 'hidden';
  69.         /*
  70.         var left = parseInt(cur_click.style.left);
  71.         var top  = parseInt(cur_click.style.top);
  72.         dx = e.pageX - left;
  73.         dy = e.pageY - top;
  74.  
  75.         alert(" dx = " + dx + " dy = " +dy);
  76.         */
  77.         cur_click.style.zIndex = 2;
  78.     }
  79.     if (layer_menu_cur_click) {
  80.         offsetx = isIE ? event.clientX + document.body.scrollLeft : e.pageX;
  81.         dx = offsetx - parseInt(document.getElementById("layer_menu").style.width);
  82.     }
  83. }
  84.  
  85. function MouseMove(e)
  86. {
  87.     //Glob_X = e.pageX;
  88.     //Glob_Y = e.pageY;
  89.     Glob_X = isIE ? event.clientX + document.body.scrollLeft : e.pageX;
  90.     Glob_Y = isIE ? event.clientY + document.body.scrollTop : e.pageY;
  91.  
  92.     //mouseX = (bw.ns4||bw.ns6)? e.pageX: bw.ie&&bw.win&&!bw.ie4? (event.clientX-2)+document.body.scrollLeft : event.clientX+document.body.scrollLeft;
  93.     //mouseY = (bw.ns4||bw.ns6)? e.pageY: bw.ie&&bw.win&&!bw.ie4? (event.clientY-2)+document.body.scrollTop : event.clientY+document.body.scrollTop;
  94.  
  95.     //window.status = "X = "+ Glob_X + " Y = "+ Glob_Y;
  96.  
  97.     if (cur_click != null) {
  98.         var mGx = Glob_X - dx;
  99.         var mGy = Glob_Y - dy;
  100.         mGx = mGx > 0 ? mGx : 0;
  101.         mGy = mGy > 0 ? mGy : 0;
  102.  
  103.         if (ON_grid) {
  104.             mGx = mGx % step < step / 2 ? mGx - mGx % step : mGx - mGx % step + step;
  105.             mGy = mGy % step < step / 2 ? mGy - mGy % step : mGy - mGy % step + step;
  106.         }
  107.  
  108.         cur_click.style.left = mGx + 'px';
  109.         cur_click.style.top  = mGy + 'px';
  110.     }
  111.  
  112.     if (ON_relation || ON_display_field) {
  113.         document.getElementById('hint').style.left = (Glob_X + 20) + 'px';
  114.         document.getElementById('hint').style.top  = (Glob_Y + 20) + 'px';
  115.     }
  116.  
  117.     if (layer_menu_cur_click) {
  118.         document.getElementById("layer_menu").style.width = ((Glob_X - dx) >= 150 ? Glob_X - dx : 150) + 'px';
  119.         //document.getElementById("layer_menu").style.height = Glob_Y - dy>=200?Glob_Y - dy:200;
  120.         //document.getElementById("id_scroll_tab").style.height = Glob_Y - dy2;
  121.     }
  122. }
  123.  
  124. function MouseUp(e)
  125. {
  126.     if (cur_click != null) {
  127.         document.getElementById("canvas").style.visibility = 'visible';
  128.         Re_load();
  129.         cur_click.style.zIndex = 1;
  130.         cur_click = null;
  131.     }
  132.     layer_menu_cur_click = 0;
  133.     //window.releaseEvents(Event.MOUSEMOVE);
  134. }
  135. //------------------------------------------------------------------------------
  136. //------------------------------------------------------------------------------
  137. //------------------------------------------------------------------------------
  138.  
  139.  
  140. //function ToInt(s)
  141. //{
  142. //    return s.substring(0,s.length-2)*1; //re = /(\d+)\w*/; newstr = str.replace(re, "$1");
  143. //}
  144.  
  145. function Canvas_pos()
  146. {
  147.     canvas_width  = document.getElementById('canvas').width  = osn_tab_width  - 3;
  148.     canvas_height = document.getElementById('canvas').height = osn_tab_height - 3;
  149.  
  150.     if (isIE) {
  151.         document.getElementById('canvas').style.width  = ((osn_tab_width  - 3)?(osn_tab_width  - 3):0) + 'px';
  152.         document.getElementById('canvas').style.height = ((osn_tab_height - 3)?(osn_tab_height - 3):0) + 'px';
  153.     }
  154. }
  155.  
  156. function Osn_tab_pos()
  157. {
  158.     osn_tab_width  = parseInt(document.getElementById('osn_tab').style.width);
  159.     osn_tab_height = parseInt(document.getElementById('osn_tab').style.height);
  160. }
  161.  
  162.  
  163. function Main()
  164. {
  165.     //alert( document.getElementById('osn_tab').offsetTop);
  166.     //---CROSS
  167.     if (isIE) {
  168.         document.getElementById('top_menu').style.position = 'absolute';
  169.         document.getElementById('layer_menu').style.position = 'absolute';
  170.     }
  171.  
  172.     document.getElementById("layer_menu").style.top = -1000 + 'px'; //fast scroll
  173.     sm_x += document.getElementById('osn_tab').offsetLeft;
  174.     sm_y += document.getElementById('osn_tab').offsetTop;
  175.     Osn_tab_pos();
  176.     Canvas_pos();
  177.     Small_tab_refresh();
  178.     Re_load();
  179.     id_hint = document.getElementById('hint');
  180.     if (isIE) {
  181.         General_scroll();
  182.     }
  183. }
  184.  
  185.  
  186. //-------------------------------- new -----------------------------------------
  187. function Rezize_osn_tab()
  188. {
  189.     var max_X = 0;
  190.     var max_Y = 0;
  191.     for (key in j_tabs) {
  192.         var k_x = parseInt(document.getElementById(key).style.left) + document.getElementById(key).offsetWidth;
  193.         var k_y = parseInt(document.getElementById(key).style.top) + document.getElementById(key).offsetHeight;
  194.         max_X = max_X < k_x ? k_x : max_X;
  195.         max_Y = max_Y < k_y ? k_y : max_Y;
  196.     }
  197.  
  198.     osn_tab_width  = max_X + 50;
  199.     osn_tab_height = max_Y + 50;
  200.     Canvas_pos();
  201.     document.getElementById('osn_tab').style.width = osn_tab_width + 'px';
  202.     document.getElementById('osn_tab').style.height = osn_tab_height + 'px';
  203. }
  204. //------------------------------------------------------------------------------
  205.  
  206. /**
  207.  * refreshes display, must be called after state changes
  208.  */
  209. function Re_load()
  210. {
  211.     Rezize_osn_tab();
  212.     var n;
  213.     var x1;
  214.     var x2;
  215.     var a = new Array();
  216.     Clear();
  217.     for (K in contr)
  218.         for (key in contr[K])                     // contr name
  219.             for (key2 in contr[K][key])           // table name
  220.                 for (key3 in contr[K][key][key2]) // field name
  221.                 {
  222.                     if (!document.getElementById("check_vis_" + key2).checked ||
  223.                         !document.getElementById("check_vis_" + contr[K][key][key2][key3][0]).checked) {
  224.                         // if hide
  225.                         continue;
  226.                     }
  227.                     var x1_left  = document.getElementById(key2).offsetLeft+1;
  228.                     var x1_right = x1_left + document.getElementById(key2).offsetWidth;
  229.                     var x2_left  = document.getElementById(contr[K][key][key2][key3][0]).offsetLeft;
  230.                     var x2_right = x2_left + document.getElementById(contr[K][key][key2][key3][0]).offsetWidth;
  231.                     a[0] = Math.abs(x1_left - x2_left);
  232.                     a[1] = Math.abs(x1_left - x2_right);
  233.                     a[2] = Math.abs(x1_right - x2_left);
  234.                     a[3] = Math.abs(x1_right - x2_right);
  235.                     n = s_left = s_right = 0;
  236.                     for (var i = 1; i < 4; i++) {
  237.                         if (a[n] > a[i]) {
  238.                             n = i;
  239.                         }
  240.                     }
  241.                     if (n == 1) {
  242.                         x1 = x1_left - sm_s;
  243.                         x2 = x2_right + sm_s;
  244.                         if (x1 < x2) {
  245.                             n = 0;
  246.                         }
  247.                     }
  248.                     if (n == 2) {
  249.                         x1 = x1_right + sm_s;
  250.                         x2 = x2_left - sm_s;
  251.                         if (x1 > x2) {
  252.                             n = 0;
  253.                         }
  254.                     }
  255.                     if (n == 3) {
  256.                         x1 = x1_right + sm_s;
  257.                         x2 = x2_right + sm_s;
  258.                         s_right = 1;
  259.                     }
  260.                     if (n == 0) {
  261.                         x1 = x1_left - sm_s;
  262.                         x2 = x2_left - sm_s;
  263.                         s_left = 1;
  264.                     }
  265.                     //alert(key2 + "." + key3);
  266.  
  267.                     var row_offset_top = 0;
  268.                     //alert('id_tbody_' + key2);
  269.                     //alert(document.getElementById('id_hide_tbody_' + key2));
  270.                     var tab_hide_button = document.getElementById('id_hide_tbody_' + key2);
  271.  
  272.                     //alert(tab_hide_button.innerHTML);
  273.                     if (tab_hide_button.innerHTML == 'v') {
  274.                         row_offset_top = document.getElementById(key2 + "." + key3).offsetTop;
  275.                     }
  276.  
  277.                     var y1 = document.getElementById(key2).offsetTop
  278.                          + row_offset_top
  279.                          + height_field;
  280.                     //alert(1);
  281.  
  282.                     row_offset_top = 0;
  283.                     var tab_hide_button = document.getElementById('id_hide_tbody_' + contr[K][key][key2][key3][0]);
  284.                     if (tab_hide_button.innerHTML == 'v') {
  285.                         row_offset_top = document.getElementById(contr[K][key][key2][key3][0]
  286.                             + '.' + contr[K][key][key2][key3][1]).offsetTop;
  287.                     }
  288.  
  289.                     var y2 =
  290.                           document.getElementById(contr[K][key][key2][key3][0]).offsetTop
  291.                         + row_offset_top
  292.                         + height_field;
  293.  
  294.                     //alert(y1 + ' - ' + key2 + "." + key3);
  295.                     Line0(x1 - sm_x, y1 - sm_y, x2 - sm_x, y2 - sm_y, "rgba(0,100,150,1)");
  296.                 }
  297. }
  298.  
  299. /**
  300.  * draws a line from x1:y1 to x2:y2 with color
  301.  */
  302. function Line(x1, y1, x2, y2, color_line)
  303. {
  304.     var canvas = document.getElementById("canvas");
  305.     var ctx    = canvas.getContext("2d");
  306.     ctx.strokeStyle = color_line;
  307.     ctx.lineWidth = 1;
  308.     ctx.beginPath();
  309.     ctx.moveTo(x1, y1);
  310.     ctx.lineTo(x2, y2);
  311.     ctx.stroke();
  312. }
  313.  
  314. /**
  315.  * draws a relation/constraint line, whether angular or not
  316.  */
  317. function Line0(x1, y1, x2, y2, color_line)
  318. {
  319.     Circle(x1, y1, 3, 3, "rgba(0,0,255,1)");
  320.     Rect(x2 - 1, y2 - 2, 4, 4, "rgba(0,0,255,1)");
  321.  
  322.     if (ON_angular_direct) {
  323.         Line2(x1, y1, x2, y2, color_line);
  324.     } else {
  325.         Line3(x1, y1, x2, y2, color_line);
  326.     }
  327. }
  328.  
  329. /**
  330.  * draws a angualr relation/constraint line
  331.  */
  332. function Line2(x1, y1, x2, y2, color_line)
  333. {
  334.     var x1_ = x1;
  335.     var x2_ = x2;
  336.  
  337.     if (s_right) {
  338.         x1_ += sm_add;
  339.         x2_ += sm_add;
  340.     } else if (s_left) {
  341.         x1_ -= sm_add;
  342.         x2_ -= sm_add;
  343.     } else if (x1 < x2) {
  344.         x1_ += sm_add;
  345.         x2_ -= sm_add;
  346.     } else {
  347.         x1_ -= sm_add;
  348.         x2_ += sm_add;
  349.     }
  350.  
  351.     Line(x1, y1, x1_, y1, color_line);
  352.     Line(x2, y2, x2_, y2, color_line);
  353.     Line(x1_, y1, x2_, y2, color_line);
  354. }
  355.  
  356. /**
  357.  * draws a relation/constraint line
  358.  */
  359. function Line3(x1, y1, x2, y2, color_line)
  360. {
  361.     var x1_ = x1;
  362.     var x2_ = x2;
  363.  
  364.     if (s_right) {
  365.         if (x1 < x2) {
  366.             x1_ += x2 - x1 + sm_add;
  367.             x2_ += sm_add;
  368.         } else {
  369.             x2_ += x1 - x2 + sm_add;
  370.             x1_ += sm_add;
  371.         }
  372.  
  373.         Line(x1, y1, x1_, y1, color_line);
  374.         Line(x2, y2, x2_, y2, color_line);
  375.         Line(x1_, y1, x2_, y2, color_line);
  376.         return;
  377.     }
  378.     if (s_left) {
  379.         if (x1 < x2) {
  380.             x2_ -= x2 - x1 + sm_add;
  381.             x1_ -= sm_add;
  382.         } else {
  383.             x1_ -= x1 - x2 + sm_add;
  384.             x2_ -= sm_add;
  385.         }
  386.  
  387.         Line(x1, y1, x1_, y1, color_line);
  388.         Line(x2, y2, x2_, y2, color_line);
  389.         Line(x1_, y1, x2_, y2, color_line);
  390.         return;
  391.     }
  392.  
  393.     var x_s = (x1 + x2) / 2;
  394.     Line(x1, y1, x_s, y1, color_line);
  395.     Line(x_s, y2, x2, y2, color_line);
  396.     Line(x_s, y1, x_s, y2, color_line);
  397. }
  398.  
  399. function Circle(x, y, r, w, color)
  400. {
  401.     var ctx = document.getElementById('canvas').getContext('2d');
  402.     ctx.beginPath();
  403.     ctx.moveTo(x, y);
  404.     ctx.lineWidth = w;
  405.     ctx.strokeStyle = color;
  406.     ctx.arc(x, y, r, 0, 2 * Math.PI, true);
  407.     ctx.stroke();
  408. }
  409.  
  410. function Clear()
  411. {
  412.     var canvas = document.getElementById("canvas");
  413.     var ctx    = canvas.getContext("2d");
  414.     ctx.clearRect(0, 0, canvas_width, canvas_height);
  415. }
  416.  
  417. function Rect(x1, y1, w, h, color)
  418. {
  419.     var ctx = document.getElementById('canvas').getContext('2d');
  420.     ctx.fillStyle = color;
  421.     ctx.fillRect(x1, y1, w, h);
  422. }
  423.  
  424. //------------------------------ SAVE ------------------------------------------
  425. function Save(url) // (del?) no for pdf
  426. {
  427.     for (key in j_tabs) {
  428.         document.getElementById('t_x_' + key + '_').value = parseInt(document.getElementById(key).style.left);
  429.         document.getElementById('t_y_' + key + '_').value = parseInt(document.getElementById(key).style.top);
  430.         document.getElementById('t_v_' + key + '_').value = document.getElementById('id_tbody_' + key).style.display == 'none' ? 0 : 1;
  431.         document.getElementById('t_h_' + key + '_').value = document.getElementById('check_vis_' + key).checked ? 1 : 0;
  432.     }
  433.     document.form1.action = url;
  434.     document.form1.submit();
  435. }
  436.  
  437. function Get_url_pos()
  438. {
  439.     var poststr = '';
  440.     for (key in j_tabs) {
  441.         poststr += '&t_x[' + key + ']=' + parseInt(document.getElementById(key).style.left);
  442.         poststr += '&t_y[' + key + ']=' + parseInt(document.getElementById(key).style.top);
  443.         poststr += '&t_v[' + key + ']=' + (document.getElementById('id_tbody_' + key).style.display == 'none' ? 0 : 1);
  444.         poststr += '&t_h[' + key + ']=' + (document.getElementById('check_vis_' + key).checked ? 1 : 0);
  445.     }
  446.     return poststr;
  447. }
  448.  
  449. function Save2()
  450. {
  451.     var poststr = 'IS_AJAX=1&server='+server+'&db=' + db + '&token=' + token + '&die_save_pos=1';
  452.     poststr += Get_url_pos();
  453.     makeRequest('pmd_save_pos.php', poststr);
  454. }
  455.  
  456. function Grid()
  457. {
  458.     if (!ON_grid) {
  459.         ON_grid = 1;
  460.         document.getElementById('grid_button').className = 'M_butt_Selected_down';
  461.     } else {
  462.         document.getElementById('grid_button').className = 'M_butt';
  463.         ON_grid = 0;
  464.     }
  465. }
  466.  
  467. function Angular_direct()
  468. {
  469.     if (ON_angular_direct) {
  470.         ON_angular_direct = 0;
  471.         document.getElementById('angular_direct_button').className = 'M_butt_Selected_down';
  472.     } else {
  473.         ON_angular_direct = 1;
  474.         document.getElementById('angular_direct_button').className = 'M_butt';
  475.     }
  476.     Re_load();
  477. }
  478. //++++++++++++++++++++++++++++++ RELATION ++++++++++++++++++++++++++++++++++++++
  479. function Start_relation()
  480. {
  481.     if (ON_display_field) {
  482.         return;
  483.     }
  484.  
  485.     if (!ON_relation) {
  486.         document.getElementById('InnoDB_relation').style.display = '';
  487.         ON_relation = 1;
  488.         document.getElementById('hint').innerHTML = LangSelectReferencedKey;
  489.         document.getElementById('hint').style.visibility = "visible";
  490.         document.getElementById('rel_button').className = 'M_butt_Selected_down';
  491.     } else {
  492.         document.getElementById('hint').innerHTML = "";
  493.         document.getElementById('hint').style.visibility = "hidden";
  494.         document.getElementById('rel_button').className = 'M_butt';
  495.         click_field = 0;
  496.         ON_relation = 0;
  497.     }
  498. }
  499.  
  500. function Click_field(T, f, PK) // table field
  501. {
  502.     if (ON_relation) {
  503.         if (!click_field) {
  504.             //.style.display=='none'        .style.visibility = "hidden"
  505.             if (!PK) {
  506.                 alert(LangPleaseSelectPrimaryOrUniqueKey);
  507.                 return;// 0;
  508.             }//PK
  509.             if (j_tabs[db + '.' + T] != 'INNODB') {
  510.                 document.getElementById('InnoDB_relation').style.display = 'none';
  511.             }
  512.             click_field = 1;
  513.             link_relation = "T1=" + T + "&F1=" + f;
  514.             document.getElementById('hint').innerHTML = LangSelectForeignKey;
  515.         } else {
  516.             Start_relation(); // hidden hint...
  517.             if (j_tabs[db + '.' + T] != 'INNODB' || !PK) {
  518.                 document.getElementById('InnoDB_relation').style.display = 'none';
  519.             }
  520.             var left = Glob_X - (document.getElementById('layer_new_relation').offsetWidth>>1);
  521.             document.getElementById('layer_new_relation').style.left = left + 'px';
  522.             var top = Glob_Y - document.getElementById('layer_new_relation').offsetHeight - 10;
  523.             document.getElementById('layer_new_relation').style.top  = top + 'px';
  524.             document.getElementById('layer_new_relation').style.visibility = "visible";
  525.             link_relation += '&T2=' + T + '&F2=' + f;
  526.         }
  527.     }
  528.  
  529.     if (ON_display_field) {
  530.         // if is display field
  531.         if (display_field[T] == f) {
  532.             //alert(T);
  533.             //s = '';for(k in display_field)s += k + ' = ' + display_field[k] + ',';alert(s);
  534.             old_class = 'tab_field';
  535.             //display_field.splice(T, 1);
  536.             delete display_field[T];
  537.             //s = '';for(k in display_field)s += k + ' = ' + display_field[k] + ', ';alert(s);
  538.             //n = 0;for(k in display_field)n++;alert(n);
  539.         } else {
  540.             old_class = 'tab_field_3';
  541.             if (display_field[T]) {
  542.                 document.getElementById('id_tr_' + T + '.' + display_field[T]).className = 'tab_field';
  543.                 //display_field.splice(T, 1);
  544.                 delete display_field[T];
  545.             }
  546.             display_field[T] = f;
  547.         }
  548.         ON_display_field = 0;
  549.         document.getElementById('hint').innerHTML = "";
  550.         document.getElementById('hint').style.visibility = "hidden";
  551.         document.getElementById('display_field_button').className = 'M_butt';
  552.         makeRequest('pmd_display_field.php', 'T=' + T + '&F=' + f + '&server=' + server + '&db=' + db + '&token=' + token);
  553.     }
  554. }
  555.  
  556. function New_relation()
  557. {
  558.     document.getElementById('layer_new_relation').style.visibility = 'hidden';
  559.     link_relation += '&server=' + server + '&db=' + db + '&token=' + token + '&die_save_pos=0';
  560.     link_relation += '&on_delete=' + document.getElementById('on_delete').value + '&on_update=' + document.getElementById('on_update').value;
  561.     link_relation += Get_url_pos();
  562.  
  563.     //alert(link_relation);
  564.     makeRequest('pmd_relation_new.php', link_relation);
  565. }
  566.  
  567. //-------------------------- create tables -------------------------------------
  568.  
  569. function Start_table_new()
  570. {
  571.     window.location.href = 'db_operations.php?server=' + server + '&db=' + db + '&token=' + token;
  572. }
  573.  
  574. function Start_tab_upd(table)
  575. {
  576.     window.location.href = 'tbl_structure.php?server=' + server + '&db=' + db + '&token=' + token + '&table=' + table;
  577. }
  578. //--------------------------- hide tables --------------------------------------
  579.  
  580. function Small_tab_all(id_this) // max/min all tables
  581. {
  582.     if (id_this.alt == "v") {
  583.         for (key in j_tabs) {
  584.             if (document.getElementById('id_hide_tbody_'+key).innerHTML == "v") {
  585.                 Small_tab(key, 0);
  586.             }
  587.         }
  588.         id_this.alt = ">";
  589.         id_this.src = "pmd/images/rightarrow1.png";
  590.     } else {
  591.         for (key in j_tabs) {
  592.             if (document.getElementById('id_hide_tbody_'+key).innerHTML != "v") {
  593.                 Small_tab(key, 0);
  594.             }
  595.         }
  596.         id_this.alt = "v";
  597.         id_this.src = "pmd/images/downarrow1.png";
  598.     }
  599.     Re_load();
  600. }
  601.  
  602. function Small_tab_invert() // invert max/min all tables
  603. {
  604.     for (key in j_tabs) {
  605.         Small_tab(key, 0);
  606.     }
  607.     Re_load();
  608. }
  609.  
  610. function Small_tab_refresh()
  611. {
  612.      for (key in j_tabs) {
  613.          if(document.getElementById('id_hide_tbody_'+key).innerHTML != "v") {
  614.              Small_tab(key, 0);
  615.              Small_tab(key, 0);
  616.          }
  617.      }
  618. }
  619.  
  620. function Small_tab(t, re_load)
  621. {
  622.     var id      = document.getElementById('id_tbody_' + t);
  623.     var id_this = document.getElementById('id_hide_tbody_' + t);
  624.     var id_t    = document.getElementById(t);
  625.  
  626.     id_t.style.width = id_t.offsetWidth + 'px';
  627.     if (id_this.innerHTML == "v") {
  628.         //---CROSS
  629.         id.style.display = 'none';
  630.         id_this.innerHTML = '>';
  631.     } else {
  632.         id.style.display = '';
  633.         id_this.innerHTML = 'v';
  634.     }
  635.     if (re_load) {
  636.         Re_load();
  637.     }
  638. }
  639. //------------------------------------------------------------------------------
  640. function Select_tab(t)
  641. {
  642.     var id_zag = document.getElementById('id_zag_' + t);
  643.     if (id_zag.className != 'tab_zag_3') {
  644.         document.getElementById('id_zag_' + t).className = 'tab_zag_2';
  645.     } else {
  646.         document.getElementById('id_zag_' + t).className = 'tab_zag';
  647.     }
  648.     //----------
  649.     var id_t = document.getElementById(t);
  650.     window.scrollTo(parseInt(id_t.style.left) - 300, parseInt(id_t.style.top) - 300);
  651.  
  652.     setTimeout(function(){document.getElementById('id_zag_' + t).className = 'tab_zag';}, 800);
  653. }
  654. //------------------------------------------------------------------------------
  655.  
  656. function Canvas_click(id)
  657. {
  658.     var n = 0;
  659.     var relation_name = 0;
  660.     var selected = 0;
  661.     var a = new Array();
  662.     var Key0, Key1, Key2, Key3, Key, x1, x2;
  663.     Clear();
  664.     for (K in contr)
  665.         for (key in contr[K])
  666.             for (key2 in contr[K][key])
  667.                 for (key3 in contr[K][key][key2]) {
  668.                     if (!document.getElementById("check_vis_"+key2).checked ||
  669.                         !document.getElementById("check_vis_"+contr[K][key][key2][key3][0]).checked) continue; // if hide
  670.                     var x1_left  = document.getElementById(key2).offsetLeft + 1;//document.getElementById(key2+"."+key3).offsetLeft;
  671.                     var x1_right = x1_left + document.getElementById(key2).offsetWidth;
  672.                     var x2_left  = document.getElementById(contr[K][key][key2][key3][0]).offsetLeft;//+document.getElementById(contr[K][key2][key3][0]+"."+contr[K][key2][key3][1]).offsetLeft
  673.                     var x2_right = x2_left + document.getElementById(contr[K][key][key2][key3][0]).offsetWidth;
  674.                     a[0] = Math.abs(x1_left - x2_left);
  675.                     a[1] = Math.abs(x1_left - x2_right);
  676.                     a[2] = Math.abs(x1_right - x2_left);
  677.                     a[3] = Math.abs(x1_right - x2_right);
  678.                     n = s_left = s_right = 0;
  679.                     for (var i = 1; i < 4; i++) {
  680.                         if (a[n] > a[i]) {
  681.                             n = i;
  682.                         }
  683.                     }
  684.                     if (n == 1) {
  685.                         x1 = x1_left - sm_s;
  686.                         x2 = x2_right + sm_s;
  687.                         if (x1 < x2) {
  688.                             n = 0;
  689.                         }
  690.                     }
  691.                     if (n == 2) {
  692.                         x1 = x1_right + sm_s;
  693.                         x2 = x2_left - sm_s;
  694.                         if (x1 > x2) {
  695.                             n = 0;
  696.                         }
  697.                     }
  698.                     if (n == 3) {
  699.                         x1 = x1_right + sm_s;
  700.                         x2 = x2_right + sm_s;
  701.                         s_right = 1;
  702.                     }
  703.                     if (n == 0) {
  704.                         x1 = x1_left - sm_s;
  705.                         x2 = x2_left - sm_s;
  706.                         s_left    = 1;
  707.                     }
  708.  
  709.                     var y1 = document.getElementById(key2).offsetTop + document.getElementById(key2+"."+key3).offsetTop + height_field;
  710.                     var y2 = document.getElementById(contr[K][key][key2][key3][0]).offsetTop +
  711.                                      document.getElementById(contr[K][key][key2][key3][0]+"."+contr[K][key][key2][key3][1]).offsetTop + height_field;
  712.                     if (!selected && Glob_X > x1 - 10 && Glob_X < x1 + 10 && Glob_Y > y1 - 7 && Glob_Y < y1 + 7) {
  713.                         Line0(x1 - sm_x, y1 - sm_y, x2 - sm_x, y2 - sm_y, "rgba(255,0,0,1)");
  714.                         selected = 1; // Rect(x1-sm_x,y1-sm_y,10,10,"rgba(0,255,0,1)");
  715.                         relation_name = key; //
  716.                         Key0 = contr[K][key][key2][key3][0];
  717.                         Key1 = contr[K][key][key2][key3][1];
  718.                         Key2 = key2; Key3 = key3;
  719.                         Key = K;
  720.                     } else {
  721.                         Line0(x1 - sm_x, y1 - sm_y, x2 - sm_x, y2 - sm_y, "rgba(0,100,150,1)");
  722.                     }
  723.                 }
  724.     if (selected) {
  725.         // select relations
  726.         //alert(Key0+' - '+Key1+' - '+Key2+' - '+Key3);
  727.         var left = Glob_X - (document.getElementById('layer_upd_relation').offsetWidth>>1);
  728.         document.getElementById('layer_upd_relation').style.left = left + 'px';
  729.         var top = Glob_Y - document.getElementById('layer_upd_relation').offsetHeight - 10;
  730.         document.getElementById('layer_upd_relation').style.top = top + 'px';
  731.         document.getElementById('layer_upd_relation').style.visibility = 'visible';
  732.         link_relation = 'T1=' + Key0 + '&F1=' + Key1 + '&T2=' + Key2 + '&F2=' + Key3 + '&K=' + Key;
  733.     }
  734. }
  735.  
  736. function Upd_relation()
  737. {
  738.     document.getElementById('layer_upd_relation').style.visibility = 'hidden';
  739.     link_relation += '&server=' + server + '&db=' + db + '&token=' + token + '&die_save_pos=0';
  740.     link_relation += Get_url_pos();
  741.     makeRequest('pmd_relation_upd.php', link_relation);
  742. }
  743.  
  744. function VisibleTab(id, t_n)
  745. {
  746.     if (id.checked) {
  747.         document.getElementById(t_n).style.visibility = 'visible';
  748.     } else {
  749.         document.getElementById(t_n).style.visibility = 'hidden';
  750.     }
  751.     Re_load();
  752. }
  753.  
  754. function Hide_tab_all(id_this) // max/min all tables
  755. {
  756.     if (id_this.alt == 'v') {
  757.         id_this.alt = '>';
  758.         id_this.src = "pmd/images/rightarrow1.png";
  759.     } else {
  760.         id_this.alt = 'v';
  761.         id_this.src = "pmd/images/downarrow1.png";
  762.     }
  763.     var E = document.form1;
  764.     for (i = 0; i < E.elements.length; i++) {
  765.         if (E.elements[i].type == "checkbox" && E.elements[i].id.substring(0, 10) == 'check_vis_') {
  766.             if (id_this.alt == 'v') {
  767.                 E.elements[i].checked = true;
  768.                 document.getElementById(E.elements[i].value).style.visibility = 'visible';
  769.             } else {
  770.                 E.elements[i].checked = false;
  771.                 document.getElementById(E.elements[i].value).style.visibility = 'hidden';
  772.             }
  773.         }
  774.     }
  775.     Re_load();
  776. }
  777.  
  778. function in_array_k(x, m)
  779. {
  780.     var b = 0;
  781.     for (u in m) {
  782.         if (x == u) {
  783.             b=1;
  784.             break;
  785.         }
  786.     }
  787.     return b;
  788. }
  789.  
  790. function No_have_constr(id_this)
  791. {
  792.     var a = new Array();
  793.     for (K in contr)
  794.         for (key in contr[K])                     // contr name
  795.             for (key2 in contr[K][key])           // table name
  796.                 for (key3 in contr[K][key][key2]) // field name
  797.                     a[key2] = a[contr[K][key][key2][key3][0]] = 1; // exist constr
  798.  
  799.  
  800.     if (id_this.alt == 'v') {
  801.         id_this.alt = '>';
  802.         id_this.src = "pmd/images/rightarrow2.png";
  803.     } else {
  804.         id_this.alt = 'v';
  805.         id_this.src = "pmd/images/downarrow2.png";
  806.     }
  807.     var E = document.form1;
  808.     for (i = 0; i < E.elements.length; i++) {
  809.         if (E.elements[i].type == "checkbox" && E.elements[i].id.substring(0, 10) == 'check_vis_')
  810.         {
  811.             if (!in_array_k(E.elements[i].value, a))
  812.             if (id_this.alt == 'v') {
  813.                 E.elements[i].checked = true;
  814.                 document.getElementById(E.elements[i].value).style.visibility = 'visible';
  815.             } else {
  816.                 E.elements[i].checked = false;
  817.                 document.getElementById(E.elements[i].value).style.visibility = 'hidden';
  818.             }
  819.         }
  820.     }
  821. }
  822.  
  823. function Help()
  824. {
  825.     var WinHelp = window.open("pmd_help.php", "wind1", "top=200,left=400,width=300,height=200,resizable=yes,scrollbars=yes,menubar=no");
  826. }
  827.  
  828. function PDF_save()
  829. {
  830.     // var WinPDF =
  831.     // window.open("pmd_pdf.php?token="+token+"&db="+db,"wind1", "top=200,left=200,width=200,height=100,resizable=yes,scrollbars=yes,menubar=no");
  832.     Save('pmd_pdf.php?server=' + server + '&token=' + token + '&db=' + db);
  833. }
  834.  
  835. function General_scroll()
  836. {
  837.     /*
  838.     if (!document.getElementById('show_relation_olways').checked) {
  839.         document.getElementById("canvas").style.visibility = 'hidden';
  840.         clearTimeout(timeoutID);
  841.         timeoutID = setTimeout(General_scroll_end, 500);
  842.     }
  843.     */
  844.     //if (timeoutID)
  845.     clearTimeout(timeoutID);
  846.     timeoutID = setTimeout
  847.     (
  848.         function()
  849.         {
  850.             document.getElementById('top_menu').style.left = document.body.scrollLeft + 'px';
  851.             document.getElementById('top_menu').style.top  = document.body.scrollTop + 'px';
  852.             document.getElementById('layer_menu').style.left = document.body.scrollLeft + 'px';
  853.             document.getElementById('layer_menu').style.top  = (document.body.scrollTop + document.getElementById('top_menu').offsetHeight) + 'px';
  854.         }
  855.         ,200
  856.     );
  857. }
  858.  
  859. /*
  860. function General_scroll_end()
  861. {
  862.     document.getElementById('layer_menu').style.left = document.body.scrollLeft;
  863.     document.getElementById('layer_menu').style.top  = document.body.scrollTop + document.getElementById('top_menu').offsetHeight;
  864.     if (isIE) {
  865.         document.getElementById('layer_menu').style.left = document.body.scrollLeft;
  866.         document.getElementById('layer_menu').style.top  = document.body.scrollTop + document.getElementById('top_menu').offsetHeight;
  867.     }
  868.     document.getElementById("canvas").style.visibility = 'visible';
  869. }
  870. */
  871.  
  872. function Show_left_menu(id_this) // max/min all tables
  873. {
  874.     if (id_this.alt == "v") {
  875.         document.getElementById("layer_menu").style.top = document.getElementById('top_menu').offsetHeight + 'px';
  876.         document.getElementById("layer_menu").style.visibility = 'visible';
  877.         id_this.alt = ">";
  878.         id_this.src = "pmd/images/uparrow2_m.png";
  879.         if (isIE) {
  880.             General_scroll();
  881.         }
  882.     } else {
  883.         document.getElementById("layer_menu").style.top = -1000 + 'px'; //fast scroll
  884.         document.getElementById("layer_menu").style.visibility = 'hidden';
  885.         id_this.alt = "v";
  886.         id_this.src = "pmd/images/downarrow2_m.png";
  887.     }
  888. }
  889. //------------------------------------------------------------------------------
  890. function Top_menu_right(id_this)
  891. {
  892.     if (id_this.alt == ">") {
  893.         document.getElementById('top_menu').style.marginLeft = document.getElementById('top_menu').offsetWidth + 'px'; // = 350
  894.         id_this.alt = "<";
  895.         id_this.src = "pmd/images/2leftarrow_m.png";
  896.     } else {
  897.         document.getElementById('top_menu').style.marginLeft = 0;
  898.         id_this.alt = ">";
  899.         id_this.src = "pmd/images/2rightarrow_m.png";
  900.     }
  901. }
  902. //------------------------------------------------------------------------------
  903. function Start_display_field()
  904. {
  905.     if (ON_relation) {
  906.         return;
  907.     }
  908.     if (!ON_display_field) {
  909.         ON_display_field = 1;
  910.         document.getElementById('hint').innerHTML = LangChangeDisplay;
  911.         document.getElementById('hint').style.visibility = "visible";
  912.         document.getElementById('display_field_button').className = 'M_butt_Selected_down';//'#FFEE99';gray #AAAAAA
  913.  
  914.         if (isIE) { // correct for IE
  915.             document.getElementById('display_field_button').className = 'M_butt_Selected_down_IE';
  916.         }
  917.     } else {
  918.         document.getElementById('hint').innerHTML = "";
  919.         document.getElementById('hint').style.visibility = "hidden";
  920.         document.getElementById('display_field_button').className = 'M_butt';
  921.         ON_display_field = 0;
  922.     }
  923. }
  924.